2012-01-30 2 views
4

ページロード時に多数のajaxリクエストから大量の「補足」データが入っています。これらの要求は完了するまでに1分以上かかります。このデータがロードされている間、ユーザーはページ上で追加のajaxリクエストを呼び出すアクションを実行できます。私が遭遇する問題は、キュー内の他のすべてのAjaxリクエストが処理されるまで、追加のajaxリクエストを呼び出すユーザアクションが完了しないことです。これは、使用されているすべての同じドメインのブラウザ接続とjQuery ajaxキューによるものです。jQuery AJAXキュープライオリティ

残念ながら、サブドメインの変更はオプションではなく、すべての同じドメイン接続を使用しないように同期キューを設定することもありません。

私が望むのは、ユーザーの要求を優先して要求を「優先度付け」するオプションです。

jQueryのajaxキューでこれを行う簡単な方法はありますか?

EDIT:

$アヤックス関数コールバックがキューに入れられた要求を「延期」するために使用することbeforeSendができ、(出現し始めているとして)要求キューを管理する方法がない場合は?

+1

あなたが実行している制限はブラウザの制限であり、jquery以外のものとは関係がありません。他のAjaxリクエストの一部を減らし、実行する必要がある数をはるかに少なくすることができますか? –

+0

最後に、すべてのAjaxリクエストへの参照を保持するグローバルオブジェクトを作成しました。私はその後、私がキャンセルして再起動したいのであれば、もう少し容赦するように私のAjaxリクエストを書き直しました。これは、トランザクションが100%完了した場合、要素自体を追跡することを意味していました。最後に、私のユーザーが開始したアクションでは、現在のAjax要求と保留中のすべてのAjax要求を停止し、ユーザーが開始したものを発行します。私は他のすべてのajaxリクエストを再開します。以前のリクエストの完了状況を追跡したので、すでに完了したリクエストをスキップすることができます。 –

答えて

2

要求がディスパッチされると、それはサーバーに処理されます。非同期であるため、応答がいつ受信されるか、またどの順番で制御されるのかはあなたにはありません。サーバーは、他の要求が同じセッションで保留中であることを本当に「認識」していません...おそらくこれを変更することはできますが、Webサーバーが要求をどのように管理するかについてはかなりの労力が必要です。

あなたが本当に行うことができるのは、すべてのデータがロードされるまでユーザーが対話できないようにすることだけです。

+0

これはかなり意味があります.jQueryがブラウザではなく要求を処理していると思っていたと思います。 –

+0

jQueryはブラウザのビルトインAJAXハンドラの単なるラッパーです。 –