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がstocksオブジェクトをjsonとして取得しないことです。私のコンソールでは、行にブレークポイントを設定しましたstocks = $.parseJSON(data.stocks)。ただし、コールバック関数が呼び出されることはないため、何が起こっているのか実際にはわかりません。しかし、ネットワークタブ(クロム)から、フォームが実際に送信され、目的のjavascriptオブジェクトが返されたことがわかります。成功のためのコールバック関数が実際に呼び出されないのはなぜだろうと思います。

ご協力いただきありがとうございます。

4

2 に答える 2

3

さて、すべての努力の後。私は解決策を見つけます。それは奇妙で、私はまだそれについての良い説明を見つけることができませんでした。レンダリング行をに変更しましたformat.js {render :json => {:stocks=>@stocks, :stats => @stats}, :content_type => 'application/json'}。試しformat.jsonましたが、応答ヘッダーがjavscriptではなくtext/htmlを返し続けます。ただしformat.js、追加オプションで動作します:content_type =>'application/json'。説明をいただければ幸いです。ありがとう

于 2012-09-01T19:58:21.967 に答える
0

format.json { etc... }代わりに使用してください。応答ヘッダーの違いを確認してください。

于 2012-08-31T23:02:22.990 に答える