0

そのため、jQuery ajaxリクエストがサーバーにヒットしているが、ページが更新されないというシナリオがあります。私は困惑しています...

ajaxリクエストは次のとおりです。

$.ajax({
    type: 'GET',
    url: '/jsrender',
    data: "id=" + $.fragment().nav.replace("_link", "")
});

Railsのログを見ると、次のようになります。

Processing ProductsController#jsrender (for 127.0.0.1 at 2010-03-17 23:07:35) [GET]
Parameters: {"action"=>"jsrender", "id"=>"products", "controller"=>"products"}
  ...
Rendering products/jsrender.rjs
Completed in 651ms (View: 608, DB: 17) | 200 OK [http://localhost/jsrender?id=products]

したがって、ajaxリクエストがサーバーに到達していることは明らかです。jsrenderメソッドのコードは実行されていますが、jsrender.rjsのコードは起動しません。メソッドjsrenderは次のとおりです。

def jsrender
    @currentview = "shared/#{params[:id]}"   
    respond_to do |format|
        format.js {render :template => 'products/jsrender.rjs'}
    end
end

議論のために、jsrender.rjsのコードは次のとおりです。

page<<"alert('this works!');"

どうしてこれなの?paramsでauthenticity_tokenがないことがわかりますが、authenticity_tokenも渡してみましたが、同じ結果になりました。

前もって感謝します。

4

1 に答える 1

2

私がここで見ることができることから、あなたのリクエストはサーバー上で処理されており、レスポンスが返されていますが、それを処理/評価したい場合は、コールバック関数を $.ajax 呼び出しに追加する必要があります。それは応答をどうするかです。

$.ajax({
  type: 'GET',
  url: '/jsrender',
  data: "id=" + $.fragment().nav.replace("_link", ""),
  success: function(response) {
    eval(response);
  }
});

jQuery の $.ajax 呼び出しで使用できるすべてのパラメーターは、こちらで確認できます。

また、 Firebug (Firefox を使用していない場合は同等のもの) を使用して ajax リクエストをデバッグすることもお勧めします。
作成されたすべての XHR リクエスト、リクエスト/レスポンス ヘッダー、投稿されたデータ、およびレスポンス ステータス コードを確認できるコンソール タブがあります。

authenticity_tokenまた、を実行しているため、 を送信する必要はありませんGET。トークンは GET 以外のリクエストでのみ必要です。

于 2010-03-19T14:35:30.057 に答える