我的表单设置如下
= form_tag stocks_path, method: 'get', remote: true, class: "form-horizontal" do
%legend Define Your Universe
.control-group
= label_tag :min_cap, "Min Cap", class: "control-label"
.controls
= text_field_tag :min_cap, params[:min_cap], size: 5, maxlength: 6, class: "input-small"
.control-group
= label_tag :max_cap, "Max Cap", class: "control-label"
.controls
= text_field_tag :max_cap, params[:max_cap], size: 5, maxlength: 6, class: "input-small"
.control-group
= label_tag :size, "Size", class: "control-label"
.controls
= text_field_tag :size, params[:size], size: 5, maxlength: 2, class: "input-small"
.form-actions
= submit_tag "Submit", class: "btn btn-primary"
然后我在我的控制器中:
respond_to do |format|
format.html
format.js { render :json => {:stocks=>@stocks, :stats => @stats}
# By default, json method does not know about extra none activerecord attributes!
end
@stats是一个数字数组。 最后在我的javascript中,我有
$("form").bind 'ajax:success', (xhr, data, status) ->
stocks = $.parseJSON(data.stocks)
然后在这里发出的是data.stocks没有把股票对象当作json。在我的控制台中,我在第stocks = $.parseJSON(data.stocks)
行添加了一个断点。但是,回调函数永远不会被调用,所以我真的不知道发生了什么。但我从网络选项卡(在chrome中)看到表单确实已提交并返回了所需的javascript对象。
我想知道为什么成功的回调函数没有真正被调用。
感谢您的帮助。
答案 0 :(得分:3)
好的,经过一切努力。我找出了解决方案。这很奇怪,我仍然找不到合适的解释。我将渲染线更改为format.js {render :json => {:stocks=>@stocks, :stats => @stats}, :content_type => 'application/json'}
。我试过format.json
,但响应头只是不断返回text / html而不是javscript。但是format.js
使用附加选项:content_type =>'application/json'
。任何解释将不胜感激。感谢
答案 1 :(得分:0)
改用format.json { etc... }
;检查响应头中的差异。