我有一个搜索页面,其结果在SlickGrid中呈现。这是一个执行onkeyup
的ajax搜索,因此可以执行搜索,调用Slick.Grid实例的render
,并在第一个异步{{1}之前返回另一个结果完成。我想在第二个ajax请求返回后立即取消初始render
,这样就不会同时发生两次render
次呼叫。
使用示例编辑:
以下是我正在做的事情,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(); });
文本字段中快速连续输入两个数字时,我按此顺序收到以下警告:
userInputField
答案 0 :(得分:1)
您的网页上一定有其他内容。 您列出的示例是不可能的 - JavaScript执行永远不会被触发的事件中断。在当前代码执行完毕后,事件刚刚排队并由事件循环拾取。您在示例中看到的是1212.
您将需要限制AJAX调用,并取消之前调用的回调,因为您的AJAX响应可能会无序返回,旧的搜索结果可能会覆盖较新的搜索结果。