0

我有一个搜索页面,其结果呈现在 SlickGrid 中。这是一个执行的 ajax 搜索onkeyup,因此可以执行搜索,render调用 Slick.Grid 实例,并在第一个异步render完成之前返回另一个结果。我想render在第二个 ajax 请求返回后立即取消初始设置,这样就不会render同时发生两个调用。

编辑示例

这就是我正在做的事情,使用alerts 来跟踪执行顺序。

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(); });

userInputField当我在文本字段中快速连续键入两个数字时,我会按此顺序收到以下警报:

1
1
2
4

1 回答 1

1

您的页面上一定还有其他内容。您列出的示例是不可能的 - JavaScript 执行永远不会被触发的事件中断。在当前代码执行完毕后,事件才会排队并被事件循环拾取。您在示例中看到的是 1212。

您将需要限制 AJAX 调用并取消先前调用的回调,因为您的 AJAX 响应可能会乱序返回,并且较旧的搜索结果可能会覆盖较新的搜索结果。

于 2010-08-05T15:45:48.480 回答