0

我的表格是这样设置的

= 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 对象。我想知道为什么没有真正调用成功的回调函数。

谢谢你的帮助。

4

2 回答 2

3

好的,经过所有的努力。我想出解决办法。这很奇怪,我仍然找不到很好的解释。我将渲染线更改为format.js {render :json => {:stocks=>@stocks, :stats => @stats}, :content_type => 'application/json'}. 我试过format.json了,但响应头只是一直返回 text/html 而不是 javscript。但format.js适用于附加选项:content_type =>'application/json'。任何解释将不胜感激。谢谢

于 2012-09-01T19:58:21.967 回答
0

改为使用format.json { etc... };检查响应标头的差异。

于 2012-08-31T23:02:22.990 回答