【发布时间】:2014-08-22 14:34:10
【问题描述】:
我正在尝试使用 jQuery 的 ajax 方法向 rails 发出 post 请求。如果我发送 form.elements(),请求的内容类型是 urlencoded,rails 能够使用正确的值填充参数,但浏览器期望响应是 html,因此 response_to format.json 会引发异常(ActionController::未知格式)。
coffeescript:
$(document).on(
click: ->
$.ajax
url: "/projects.json"
type: "POST"
contentType: 'json'
dataType: 'json'
data: JSON.stringify($('form#new_project').elements())
success: activateProgressBar
return false
, '#submit-button'
)
Log:
Processing by ProjectsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"Eonu3puxtkBUTtyDQNbE059Racfrwu06q/FzwKm1hWE=", "BusinessUnit"=>{"sbu"=>"2"}, "project"=>{"parent_id"=>"1", "project_num"=>"04479", "client_id"=>"101", "project_type_id"=>"1", "name"=>"ascac", "summary"=>"acacac"}, "User"=>{"approver_id"=>"115"}}
如果我使用 serializeArray 设置数据,请求会以 JSON 格式通过,但 params 没有表单数据。
Coffeescript:
$(document).on(
click: ->
$.ajax
url: "/projects.json"
type: "POST"
contentType: 'json'
dataType: 'json'
data: JSON.stringify($('form#new_project').serializeArray())
success: activateProgressBar
return false
, '#submit-button'
)
Log:
Processing by ProjectsController#create as JSON
Parameters: {"action"=>"create", "controller"=>"projects", "format"=>"json"}
知道我做错了什么吗?
【问题讨论】:
-
你试过用
remote: true选项提交表单的方法吗? -
今天早上玩了一下。它将请求作为 Javascript 发送,但仍然像 urlencoded 请求一样 - 它获取参数中的数据,但不响应/调用成功方法。
-
您使用 index.js.erb 文件进行响应,它实际上非常方便。 edgeguides.rubyonrails.org/…
标签: jquery ruby-on-rails ajax json