Pergunta

Eu tenho uma página de pesquisa cujos resultados são renderizados em um slickgrid. É uma pesquisa de Ajax que executa onkeyup, por isso é possível que uma pesquisa seja realizada, a instância slick.Grid render para ser chamado e ter outro resultado voltar antes do primeiro assíncrono render completa. Eu gostaria de cancelar o inicial render Assim que o segundo pedido de Ajax voltar para que não haja dois render Chamadas ocorrendo ao mesmo tempo.

Editar com exemplo:

Aqui está o que estou fazendo, com alertestá no lugar para rastrear a ordem de execução.

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

Eu recebo os seguintes alertas nesta sequência quando digito dois números no userInputField Campo de texto em rápida sucessão:

1
1
2
Foi útil?

Solução

Deve haver algo mais acontecendo na sua página. O exemplo que você listou é impossível - a execução do JavaScript nunca é interrompida por um evento sendo demitido. O evento é apenas na fila e apanhado pelo loop do evento após a execução do código atual. O que você veria no seu exemplo é 1212.

Você deseja acelerar as chamadas do Ajax e também cancelar os retornos de chamada das chamadas anteriores, pois suas respostas do Ajax podem voltar fora do pedido e os resultados de pesquisa mais antigos podem substituir os mais novos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top