2017-03-22 6 views
-1

私は2つの連続したajax投稿要求を持っていますが、どちらも完了するとページをナビゲートします。2つのajax呼び出しは両方ともリダイレクトされます:1つの要求が失敗する可能性はありますか?

当然ながら、ナビゲートする前に返された両方をチェックする必要がありますが、私は不思議です。以下に示すように、セットアップが現実的に要求の1つを失敗させる可能性がありますか?

これは、サーバーが受信/処理しないことを意味します。

function redirect(){ 
 
    window.location.href="./success"; 
 
} 
 

 
//First call 
 
$.ajax({ 
 
    type: "POST", 
 
    url: url, 
 
    data: data, 
 
    complete:redirect 
 
}); 
 
    
 
//Second call 
 
$.ajax({ 
 
    type: "POST", 
 
    url: url, 
 
    data: data, 
 
    complete:redirect 
 
});

私の考え:二AJAX呼び出しが行われた最初のAJAX呼び出しが行われたT1、T2、T3、最初はリターンを返して作られてリダイレクトします。

T3> T2のため、リダイレクトの前に2回目の呼び出しが行われませんか?それは成功するために戻る必要はありません。

+2

です。チャンスは両方とも成功裏に送信され、次に1つは完了してリダイレクトされ、もう一方は中止されます。サーバーはタイミングに応じて処理を続けることができます。そう、はい、1つのリクエストが失敗する可能性があります。そして成功することができます。あなたの編集に関しては –

+0

ですが、それは再び変わります。今度は、リクエストとネットワークのサイズに依存します。 T2要求がサーバーに完全に到達すると、T1要求はサーバーによって応答され、リダイレクトのためにxhrクライアント側が中止されても、サーバーはおそらくT2を処理します。まったく同じ理由でT2がT1の前に終了する可能性もあります。 –

+0

T3 >>> T2、接続がない場合は、どちらの場合も両方の要求が失敗します。興味深い。 – RSinohara

答えて

2

両方のリクエストが行われます。いずれかが最初に終了すると、ブラウザはとなり、キャンセルはとなります。しかし、Kevin Bが指摘したように、あなたのサーバは処理を続ける可能性が高く、サーバがクライアントに何かを返そうとするまで、クライアントがそれをキャンセルしたことに気付かないでしょう(少なくともこれはApacheで動作する方法です)それはあなたのアーキテクチャに依存しています)。

それは、の区別に注意することは非常に重要ですが要求を失敗し、クライアントがリクエストをキャンセルしました。あなたのケースでは、ブラウザは、ページがアンロードされているときに進行中のAjaxリクエストをキャンセルしますが、リクエストから受け取った指示をサーバが処理しないということを意味しません。

0

はい、AJAX呼び出しが完全な応答が最初のページにリダイレクトするとAjaxを送信しますれます方その上、DOM準備呼び出しは、最終的に失敗した場合ので、あなたの2つのAJAX要求から、あなたの質問

に答えるために、非同期です。

一度に両方の呼び出しを行いますが、ページがリダイレクトされると成功コールバックは失敗します。サーバーが2番目のページのアクティビティを実行した場合、最終的には失敗します。また、どのサーバーが成功コールバックを送信するかについては、リダイレクトが単なるクライアント側の場合にサーバーが正常に機能することがあります。

+1

コールが完了するまでに時間がかかるので、最初のコールが返される前に、2回目のコールが常に行われるような印象を受けました。 – RSinohara

0

はい両方のリクエストが非同期であり、リクエストの1つが完了するとページがリダイレクトされ、他のリクエストが取り消されるため、いずれかのリクエストが失敗する可能性があります。

あなたができることは、変数を定義し、リダイレクトする前にその値をチェックすることです。

function redirect(){ 
     window.location.href="./success"; 
    } 
    window.completed = 0; // if values is 2 that means both    requests are complete 

//First call 
$.ajax({ 
    type: "POST", 
    url: url, 
    data: data, 
    complete:function(){ 
    window.complete++! 
    if(window.complete == 2) 
    { 
      redirect(); 
    } 
    } 
}); 

//Second call 
$.ajax({ 
    type: "POST", 
    url: url, 
    data: data, 
    complete:function(){ 
    window.complete++! 
    if(window.complete == 2) 
    { 
      redirect(); 
    } 
    } 
}); 
関連する問題