【问题标题】:Send data in params to rails back end using jQuery ajax get使用 jQuery ajax get 将 params 中的数据发送到 rails 后端
【发布时间】:2013-10-31 05:21:50
【问题描述】:

这在几个不同的场合让我感到困惑,每次我都很难在 Internet 或万维网上找到一个好的答案。假设在我的 javascript 文件中我有一个变量

var myLoc = { lat: 35, lon: -110 }

我从使用地理定位之类的东西中得到的。我想将此信息发送到后端,以便将其与我要创建的特定帖子相关联。

假设我的路线是这样的:

resources :users do
  resources :posts
end

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

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

我的问题是:

A.这应该工作吗?
B. 这样做是否正确?
C. 你能把这样的前端东西发送到后端的任何路由吗?

非常感谢。

【问题讨论】:

  • A. 你的想法是对的。 B. 不,您应该在 Rails 应用程序中指定 API 命名空间和路由。理想情况下,您的 API 将使用 JSON 响应 jQuery AJAX 请求。您还错误地使用了$.get。你应该去阅读那个 jQuery 方法的文档。 C.是的,但路线可能不喜欢。见答案B
  • API 命名空间是如何工作的?你有一个很好的链接到这方面的信息吗

标签: jquery ruby-on-rails ajax parameters get


【解决方案1】:

您可以通过查询字符串将信息发送到带有get 的页面,然后这可用于填充new 视图中的字段,这是表单最终提交给创建操作的位置。

但是,这也会在响应中返回新操作视图的主体,如果您使用它来异步拉入该页面以进行对话框或其他内容,您可能需要它。

如果您使用此 ajax 调用来创建帖子,将 post 到帖子控制器上的 /create 操作可能会更好。

然后您可以将 JSON 中的数据作为 post 发送,当您的控制器解析并创建帖子时,该对象将转换为 params 哈希。

视图中的js:

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

$.ajax({
  type: "POST",
  url: url,
  data: myLoc
});

在 routes.rb 中:

match 'users/:user_id/posts/create' => 'posts#create', :via => :post

在posts_controller.rb 中:

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

【讨论】:

  • 你不需要在 url 中明确指定“创建”,也不需要实现匹配。对 /users/user_id/posts 的 POST 请求将映射到 posts_controller.rb 中的“create”方法
  • 啊,你是对的!这是资源路由的一个功能,如下所示:guides.rubyonrails.org/routing.html#crud-verbs-and-actions
  • 我不明白这是什么意思“但是,这也会在响应中返回新操作视图的主体,如果您使用它来异步拉入该页面对话什么的。”我可以使用任何路线发送这样的信息吗?即使没有参数,例如 get '/show_posts'?
  • Get 与您访问地址栏中的 URL 时 Web 浏览器发出的请求类型相同,因此您将在响应中获得您请求的页面的 HTML,如果您是尝试将其注入到您从中发出 ajax 请求的页面中,它可能很有用,但否则它不是通过 ajax 发送数据的好方法,post 会更好。在没有参数的情况下向路由发出请求不会向该操作发送任何信息。我不确定你在问什么。
  • 这样您就可以将其发送到任何带有参数的“get”路由,即使参数类似于 :user_id 您也可以发送任何数据并以 :user_id 的身份访问它?
猜你喜欢
  • 2017-12-19
  • 2020-06-27
  • 2020-09-12
  • 1970-01-01
  • 2013-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-21
相关资源
最近更新 更多