2012-01-24 4 views
4

Ajaxを使用してリクエストを送信すると、このリクエストに時間がかかります.....他にリクエストを送信したい場合、どうすればいいですか?どのように私はajaxリクエストを停止できますか?(応答が来るまで待ちませんか?)

現在の動作最初のリクエストが応答するまで待っている2番目のリクエスト(私がしました)。

注:私は(任意の新しい要求がすぐに最初に終了するように古いものを待たないで実行)、アプリケーション全体でこの動作を行いたい 使用 私のアプリケーション(アヤックス+ PHP + jQueryの+ symfonyの)

私は、この要求は最初のものを実行し、終了したい任意の時点で

$.ajax 
({ 
    type: "GET", 
    url: url1, 
    success: function (html) 
    { 
     // do some thing 
    } 
}); 

はそれが最初の要求は、長い時間がかかるであると仮定します。

$.ajax 
({ 
    type: "POST", 
    url: url, 
    success: function (html) 
    { 
     // do some thing else 
    } 
}); 

var xhrReq; 
xhrReq = $.ajax(...); 

// then if you want to stop the rqest and exit use : 

xhrReq.abort(); 

答えて

6

それは手動プロセスの一種ですが、あなたはグローバルXHRオブジェクトを追加し、それぞれの要求にそれをテストすることができます。 readystateが「読み込み中」の場合は、中止してください:

var xhr; 
var loadUrl = function(url) { 
    if (xhr && xhr.readyState > 0 && xhr.readyState < 4) { 
     // there is a request in the pipe, abort 
     xhr.abort();  
    } 
    xhr = $.get(url, function() { 
     console.log('success', this); 
    }); 
}; 

loadUrl('/ajax/'); 
+0

Davidに感謝、この解決策は私の問題を解決:) –

2

XMLHttpRequestオブジェクトは、abort機能を有しています。 setTimeoutを使用すると、時間がかかりすぎる要求を中止できます。

EDIT:ケースであなたはタイマーを使用したくない、と新しいイベントがその前のリクエストを中止しなければならないが発生し、イベントハンドラは、あなたができることを後に続いて、次の

if(!this.request) return; // request contains the XMLHttpRequest 
this.request.onreadystatechange = function() {}; 
if(this.request.readyState != 4) { 
    this.request.abort(); 
} 

を行う必要があります新しいXMLHttpRequestオブジェクトを作成します。 AJAX呼び出しを中止

xhr = $.ajax(...); 

var xhr; 

は、AJAX呼び出しを作る:Ajaxのリクエスト変数を定義

+0

私はちょうど新しいもの –

0

xhr.abort(); 
+0

は私が行うことができます実行し、私が送ったときに葯要求は古いものを終了(またはその応答が来るまで待機していない)したい....要求を中止する時間を使用したくありませんそれは古いAjaxコールのためです なぜ私はajax変数の名前がわからない可能性があります.. –

0

ブラウザは、あなたがの限られた量を処理することができます同じホストへのリクエスト(ブラウザによっては覚えているように2または3)。

リクエストカウントの回避策は、img1.domain.com、img2.domain.comなどのような偽のドメインを同じホストに導き、リクエストでランダムに使用することです。その後、必要なリクエストを行うことができます。ドメイン数は、要求量に応じて選択する必要があります。範囲内に収めるためには、ドメインごとに2つのリクエストが必要です。さもなければ、第3の要求は、アクティブな終了の1つが終了するまで待つ。

すべてのリクエストから回答を受け取ることができます。 たとえば、Googleでは、画像をより高速に読み込むためにGoogleを使用しています。

EDIT:

例:あなたはhttp://yourhost.com/と同じ場所を指す別名http://alias.yourhost.com持っています。 その後:

$.ajax 
({ 
    type: "GET", 
    url: 'http://yourhost.com/somescript.php', 
    success: function (html) 
    { 
     // do some thing 
    } 
}); 

、その後

$.ajax 
({ 
    type: "POST", 
    url: 'http://alias.yourhost.com/somescript2.php', 
    success: function (html) 
    { 
     // do some thing else 
    } 
}); 
1

私はこれまで多くの方法で取り組んできました。私はページが終了するまで(平均5秒)ハングするキャッシングプロセスを持っていました。はい、これはCRONジョブとして適していますが、自分のCMSで使用している環境を知らなくても、ユーザーのキャッシュ処理を作成する必要がありました。 私が行ったこと: 変数内で呼び出しを作成し、それをハード削除で削除します。これを削除することで、待機を取り除いているようです。この「ハック」は、待機時間を5秒の平均から325msの待機に引き上げるように見えました。

var ignore = $.ajax({ 
    url:something/here.php, 
    type: "GET", 
    url: url1, 
    success: function(){} 
}); 
delete ignore; 
関連する問題