2

私はjqgridを持っています。グリッドはサーバーからjson形式のデータを取得します。

グリッドには空白のセルがいくつかあり、ユーザーはそれらをダブルクリックできます。その後、ajax req が送信され、サーバーが値 (現在の日付) を更新してグリッドをリロードします。問題は、クリックして 2 つ以上のセルをクリックすると、 、最初のセルのリロードのみが発生します。ページを更新すると、すべてのデータがロードされるため、すべてのリクエストが送信されたことがわかりますが、グリッドのリロードが表示され、最後のセルが完了するまで新しいリクエストを実行できません。それを解決する方法は?

wi はやったことになりました: 次のような var を作成します:

var lastRequestXHR;

私のjqgridコードに追加します:

    loadBeforeSend: function (xhr) {
        lastRequestXHR = xhr;
    },

そして私のリロード機能:

function refreshGrid() {
    if (lastRequestXHR != null) {
        lastRequestXHR.abort();
    }
    jQuery('#scheduledGrid').trigger('reloadGrid');
}
4

1 に答える 1

2

各 ajax リクエストを任意の変数にプッシュするだけで、成功した関数はすべてのリクエストを中止します。私が意図するものの下のようないくつかのコード:

 requests.push(
        $.ajax({
            type: 'post',
            url: '<any url>',
            data: ResponseData,
            success: function(data) {
               for(var i = 0; i < requests.length; i++)
                  requests[i].abort();
            }
        }));

これにより、すべてのリクエストとそのハンドラーがクライアント側でキャンセルされ、送信されたサーバー リクエストは実行されますが、クライアントは応答を待機しません。

于 2013-09-18T13:14:27.317 に答える