2011-07-07 10 views
6

私はjquery ajaxの投稿要求を送信する状況がありますが、Webアプリケーションでは、この特定のAjax要求(ポストパラメータを処理した後)のハンドラは別のコントローラでアクションを呼び出しますこれがリダイレクトと呼ばれているかどうかを確認してください)、基本的にウェブサイトのページ全体(ページの更新など)をレンダリングします。しかし、私は、新しいページのコンテンツをリフレッシュするのではなく、ブラウザの表示が同じページを表示することに気付きました。jQuery Ajaxとサーバーからの応答をリダイレクト

何か間違っていますか?どのようにこの状況に対処できますか?

私は自分のajax呼び出しを変更したため、私の質問を編集する必要がありました。ページ上のボタンがクリックされたときに上記の関数が実行さ

function chkSubmit(event, actionType) { 


     var msgid = showlst('Please wait ...'); 
     var data = '' 
     if (actionType == 'IAmDone') { 
      var letters = 'e,b,c' 

      data = 'actionType=' + actionType + '&letters=' + letters; 

     } else data = 'actionType=' + actionType; 
     $j.ajax({ 
      type: 'POST',  
      url: context + '/app/handleChk', 
      data: data 
     }); 

     return false; 
} 

これは、次のようなコードが見えるものです。しかし、この同じページが表示され続ける。ブラウザのデバッガは、ページを更新するはずだった新しいアクションから200 OK応答を受け取ったことを示します。私はChromeブラウザとjqueryを使用しています。1.6.1

私の誤植はコードサンプルで申し訳ありません。私はそれを訂正した。

+0

コードを投稿できますか? – JamesHalsall

+0

問題のコードを表示するのに役立ちます。 – Kon

+0

"var msgid = showlst( 'Please wait ...'); var actionType = type"タイプは? – MLS

答えて

7

は、サーバーからリダイレクトを行うことはできません。何が間違っている場合、あなたは一般的に、また、あなたは何にいくつかのデータを取得するために、エラーコールバックを使用することができ、ビューに結果をレンダリングする場所それはありますajaxリクエスト。最後に、ajaxにはクライアント(ブラウザ)が関係します。あなたがリダイレクトしたい場合は、それを行うことができますが、コールバックでクライアント側で行う必要があります。あなたはリダイレクトしたいURLを含むサーバーからオブジェクトを返すことでそれを行うことができます---あなたはjavascriptを使ってドキュメントのlocationプロパティを変更することができます。すべてのケースでリダイレクトしていない場合や、サーバー側の呼び出しが長時間実行されていた場合には、これは意味をなさないと思います。どちらもそうでなければ、おそらく最初の場所ではAjax呼び出しは意味をなさないでしょう。

+0

ありがとう!この回答はうまくいきます! – rjc

+0

私の喜び!!!! –

1

コードサンプルが正確な場合は、actionTypeパラメータを未定義またはおそらくグローバル変数typeに再定義しています。

function chkSubmit(event, actionType) { 

で:

だから置き換える

function chkSubmit(event, type) { 
2

私はあなたの質問を読み違えてもよいが、どこそのAJAX呼び出しであなたの成功コールバック関数はありますか?

function chkSubmit(event, actionType) { 


     var msgid = showlst('Please wait ...'); 
     var actionType = type // per j. tuskan - looks like no such var in scope 
     var data = '' 
     if (actionType == 'IAmDone') { 
      var letters = 'e,b,c' 

      data = 'actionType=' + actionType + '&letters=' + letters; 

     } else data = 'actionType=' + actionType; 
     $j.ajax({ 
      type: 'POST',  
      url: context + '/app/handleChk', 
      data: data, 
      success:function(the_data){ 
       alert("Now I can do stuff with the ajax response which is: "+the_data); 
      } 
     }); 

     return false; 
} 
2

@ek_nyが言ったことの例。

jQuery.ajaxSetup({ 
    complete: function (request, textStatus) { 
     // header inserted manually on the server. 
     // you should block the automatic redirect headers 
     // inserted by the server. 
     var location = request.getResponseHeader("Location"); 
     if(location) window.location = location; 
    } 
}); 
+0

私はあなたの解決策を試しましたが、正しいアプローチに見えましたが、応答HTTPヘッダーにLocationヘッダーがないため、動作しませんでした。 – rjc

+0

私のケースでは、私は直接ajaxリクエストの下でcomplete:function ...をjQuery.ajaxSetupを使うのではなく、すべてのAjaxリクエストで処理する必要があるからです。 – rjc

+0

私が答えて言ったように、サーバー上のajaxリクエストを識別して別の方法で扱う必要があります。新しいURLを手動で通知するヘッダーを挿入する必要があります。 – Thomas

関連する問題