1

私はAJAX機能を多用するアプリケーションに取り組んでいます。私は現在、最初のページをレンダリングするために多数のajax呼び出しが行われるページで作業しています。これらの呼び出しはすべて同じAJAXスクリプトを介してルーティングされるため、ブラウザーで一度に1つずつ実行する必要があります。(ええ、それは少し非効率的です)

別のページをロードするイベントがありますが、残念ながら、ページを再レンダリングする前にajax呼び出しを行う必要があります。この結果、ページが最初に読み込まれるときにユーザーがそのリンクをクリックすると、ブラウザーは他のすべてのajax呼び出しを待ってから、ユーザーのクリックによって発生したイベントに従ってページを再レンダリングするための呼び出しを行います。これにより、ページの読み込み中にページへのリンクをクリックすると、ページの読み込み時間が著しく遅くなります。

私の質問は次のとおりです。Javascriptまたは何かを使用してWebブラウザにWebスクリプトへのhttp呼び出しをキャンセルさせ、別のイベントが同じスクリプトを呼び出すことができるようにする方法はありますか?異なるスクリプトを呼び出すたびに同時に発生するようにすると便利ですが、残念ながら、私が作業しているアプリケーションは、中央のスクリプトを介してすべてのajaxリクエストを処理します。これは、すぐには変更されません。

4

2 に答える 2

2

abort()XMLHttpRequest オブジェクトのメソッドを使用して、進行中のリクエストをキャンセルし、オブジェクトを再利用可能な状態に戻します。

ヘルパー オブジェクトでラップできます。たとえば、次のようになります。

function HttpQueue(uri) {
    var queue= [];
    var xhr= new XMLHttpRequest();
    xhr.onreadystatechange= function() {
        if (xhr.readyState===4 && queue.length>=1) {
            queue.unshift()[1](xhr);
            if (queue.length>=1)
                next();
        }
    };
    this.send= function (data, callback, isurgent) {
        if (isurgent && queue.length>=1) {
            queue.length= 0;
            xhr.abort();
        }
        queue.push([data, callback]);
        if (queue.length==1)
            next();
    };
    function next() {
        xhr.open('POST', uri, true);
        xhr.send(queue[0][0]);
    }
}

var queue= new HttpQueue('/script');

queue.send('action=foo', function() {
    alert('task 1 done');
}, false);

queue.send('action=bar', function() {
    alert('task 2 done');
}, false);

queue.send('action=bof', function() {
    alert('task 3 is urgent! tasks 1 and 2 can get knotted');
}, true);

(テストされていませんが、動作する可能性があります)

于 2012-06-26T20:17:31.150 に答える
0

jQueryの$.ajaxメソッドを使用できます。

その時点で、各呼び出しのタイムアウトを指定し、aSync設定をfalseに設定します。そうすれば、一度に1つのajaxリクエストのみを実行できます。

ドキュメントはここにあります:http: //api.jquery.com/jQuery.ajax/

于 2012-06-26T19:13:50.153 に答える