使用jQuery ajax get将params中的数据发送到rails后端

nat*_*ft1 7 parameters ajax jquery get ruby-on-rails

这使我在几个不同的场合感到困惑,每次我都在努力在互联网或万维网上找到一个好的答案.让我们说在我的javascript文件中我有一个变量

var myLoc = { lat: 35, lon: -110 }
Run Code Online (Sandbox Code Playgroud)

我从使用地理定位得到了什么.我想将此信息发送到后端,以便将其与我要创建的特定帖子相关联.

假设我的路线就是这样:

resources :users do
  resources :posts
end
Run Code Online (Sandbox Code Playgroud)

我不知道这是不是正确的方法,但想到的是这样的:

$.get('/users/' + JSON.stringify(myLoc) + '/posts/new', function() {console.log("please work")});
Run Code Online (Sandbox Code Playgroud)

我的问题是:

A.这应该有用吗?
B.这是正确的方法吗?
C.您可以将这样的前端内容发送到后端的任何路由吗?

非常感激.

Mik*_*ons 8

您可以get通过查询字符串向页面发送信息,然后可以使用此字段填充new视图中的字段,该字段最终提交给创建操作.

但是,这也将返回响应中新操作视图的主体,如果您使用它来异步拉出该页面以进行对话或其他操作,则可能需要这样做.

如果您正在使用此ajax调用来创建帖子,那么可能会更好,post以便/create在posts控制器上执行操作.

然后你可以用JSON发送数据作为a post,params当你的控制器去解析它并创建帖子时,对象将转换成哈希.

js在视图中:

var url = '/users/' + userId + '/posts/create';
var myLoc = { 'lat': 35, 'lon': -110 };

$.ajax({
  type: "POST",
  url: url,
  data: myLoc
});
Run Code Online (Sandbox Code Playgroud)

在routes.rb中:

match 'users/:user_id/posts/create' => 'posts#create', :via => :post
Run Code Online (Sandbox Code Playgroud)

在posts_controller.rb中:

def create
  post = Post.new(params[:myLoc])
  if post.save!
    render :status => 200
  else
    # exception handling
  end
end
Run Code Online (Sandbox Code Playgroud)