質問

結果が SlickGrid でレンダリングされる検索ページがあります。実行するajax検索です onkeyup, そのため、Slick.Grid インスタンスの検索を実行できるようになります。 render 呼び出され、最初の非同期の前に別の結果が返されます。 render 完了します。初回をキャンセルしたいのですが render 2 番目の ajax リクエストが返されたらすぐに、2 つが存在しないようにします render 同時に通話が行われます。

例を使用して編集する:

これが私がやっていることです。 alert実行順序を追跡するために用意されています。

function setupGrid() {
    slickDataView = new Slick.Data.DataView();
    slickGrid = new Slick.Grid(slickGridDiv, slickDataView.rows, slickGridColumns, slickGridOptions);
    slickDataView.onRowsChanged.subscribe(function(rows) {
      slickGrid.removeRows(rows);
      slickGrid.updateRowCount();
      slickGrid.render();
    });
    slickDataView.onRowCountChanged.subscribe(function(args) {
      slickGrid.updateRowCount();
      slickGrid.render();
    });
} 

function performSearch() {   
    jQuery.get('searchPage.php', {MODEL_ID: userInputField.val()},
      function(results) {
        slickDataView.beginUpdate();
        alert(1);
        slickDataView.setItems(results);
        alert(2);
        slickDataView.endUpdate();
      }
    );
}

setupGrid();
userInputField.keyup(function() { performSearch(); });

に 2 つの数字を入力すると、この順序で次のアラートが表示されます。 userInputField テキストフィールドを立て続けに:

1
1
2
役に立ちましたか?

解決

あなたのページに起こって何か他のものが存在する必要があります。 あなたが記載されている例は不可能です - JavaScriptの実行が解雇イベントによって中断されることはありません。イベントは、ちょうどキューに入れられ、現在のコードの実行が行われた後、イベントループによってピックアップされます。あなたはあなたの例では見るもの、1212です。

あなたはAJAXの応答が故障して戻って来るかもしれないし、古い検索結果が新しいものを上書きすることができますので、AJAX呼び出しを絞ると、以前の呼び出しからのコールバックをキャンセルしたいと思うでしょう。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top