Question

J'ai une page de recherche dont les résultats sont rendus dans un SlickGrid. Il est une recherche ajax qui exécute onkeyup, il est donc possible pour une recherche à effectuer, le render de l'instance Slick.Grid à appeler, et un autre résultat revenir avant la première render asynchrone se termine. Je voudrais annuler la render initiale dès que la deuxième demande de paiement ajax revient donc qu'il n'y a pas deux appels render qui se déroulent en même temps.

Modifier l'exemple :

Voici ce que je fais, avec alerts en place pour suivre l'ordre d'exécution.

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

Je reçois les alertes suivantes dans cette séquence quand je tape deux chiffres dans le champ de texte userInputField en succession rapide:

1
1
2
Était-ce utile?

La solution

Il doit y avoir autre chose se passe sur votre page. L'exemple que vous avez énumérés est impossible - l'exécution de JavaScript est jamais interrompue par un événement se faire congédier. L'événement vient se mis en attente et repris par la boucle d'événements après le code actuel est fait exécuter. Ce que vous verrez dans votre exemple, est 1212.

Vous voulez les appels AJAX accélérateur et aussi d'annuler les callbacks des appels précédents car vos réponses AJAX peuvent revenir sur l'ordre et les résultats de recherche plus peuvent remplacer les plus récentes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top