2011-10-30 15 views
3

私が持っている:

$("#combo_box").live('change', (function() { 
    $.ajax({ 
        url: '/my_controller/get_data', 
        data: {id: some_id}, 
        success: function(data){ do_stuff_with_data(data) } 
      } 
      ) 
    })) 

とmy_controllerコードで私が持っている:

def get_data 
    id = params[:id] 

    @data = MyModel.DoSomeStuff(id) 

    respond_to do |format| 
     format.js { render :json => @data} 
    end 
    end 

をしかしsuccess内の関数は一度だけ実行され、いくつかの理由(と思う)、残りのためにコンボボックスの変更によってajax呼び出しがトリガーされたとき、Firebugは304 Not Modifiedと報告しています。

どのように機能しますか?ありがとう!

答えて

7

$.ajaxのデフォルトのメソッドがGETである:

タイプ文字列
デフォルト:

'をGET' ので、あなたの$.ajax呼び出しはGETリクエストをやっていると、誰かが、おそらくそれをキャッシュされます。あなたの$.ajaxオプションにcache: falseを追加してみてください:

キャッシュブール
デフォルト:true、dataTypeと「スクリプト」のための偽と「JSONP」
falseに設定した場合、それがキャッシュされない要求されたページを強制しますブラウザによって。

+0

私はブラウザがgetをキャッシングしていたことを知らなかった、非常に興味深い、それはトリックでした! –

+0

また、ajax呼び出しでdataType: 'json'を指定するまでjQueryが結果を文字列として返すことを指摘したいと思いました。 –

関連する問題