我需要做以下事情 我必须从我的视图中使用jquery发布表单数据:
form_for(HomeController remote => true) do |f|
Order number: <%=f.text_field_tag :order_number, '1a2b3c4d5e6f7g8h'%>
Amount: <%=f.text_field_tag :amount, 1233.53%>
到我的控制器,我计算了一些东西:
def calculation
calculations = "expression"
format.json {render json: calculations, status: :created}
respond_to format.json
end
然后使用重定向到外部链接发布该数据(计算):
$(document).ready(function() {
$('form').submit(function (){
$.ajax({
type: "POST",
url: $(this).attr('data'),
data: $(this).serialize(),
dataType: "JSON"
}).success(function(result){
$.post('link/', $(result).serialize())
})
})
});
然而,我的浏览器返回我们很抱歉,但出现问题并请求导致内部服务器错误。谁能看到任何明显的错误? 我相信这个错误在我看来是因为当我注释掉我在这个查询中显示的部分时,我还有一些正常运行的代码。 有什么建议吗?
答案 0 :(得分:0)
首先:你的回应者应该是:
respond_to do |format|
format.json { render :yourjsontemplate, status: :created, anothervar: :value}
end
第二:在你的form_for中,添加如下的html选项:
<%= form_for(Object, html: {remote: true}) do %>
最后,当你做POST时,会收到一个完整的&#39;。所以,JS中的提交函数应该是:
.complete(function(result){
$.post('link/', $(result).serialize())
})
编辑:
form_form使用Model对象来创建表单,它应该作为在&#34; new&#34;中初始化的实例变量传递。控制器内部的动作,如下所示:
def new
@something = YourModel.new
end
然后,在form_for中使用该变量:
<%= form_for(@something, html: {remote: true}) do %>
or
<%= form_for(YourModel.new, html: {remote: true}) do %>
此外:
将数据从控制器发送到ajax调用的另一种方法是使用send_data。因此,您可以将format.json中的块替换为:
format.json {send_data calculations} # or whatever you want
我希望能帮到你