2010-01-15 3 views
0

i a écrit ce scriptcomment exécuter une commande après un appel ajax?

$.getJSON('<%=Url.Action("JsonSave","Controler")%>', 
      { id: newRow.Id, personId: newRow.PesronId}, 
      function(data) { 
       $('#grid').trigger('reloadGrid'); //{0} 
       $('#grid').editRow(rowCount); //{1} 
      }) 

Que dois-je faire pour que {1} serait exécuté exactement après {0}

+0

est-il pas exécuter dans cet ordre? –

+0

non c'est pas. Je suppose que le déclencheur est asynchrone – CoffeeCode

+0

@CoffeCode, j'espère que je ne vous ai pas envoyé sur une chasse aux oies sauvages. J'ai fait quelques recherches et j'ai mis à jour ma réponse avec. –

Répondre

3

RÉPONSE À JOUR Je l'ai fait un peu de recherche, et semble que vous utilisez le jQuery Grid plugin. Il a un rappel appelé gridComplete qui devrait faire ce dont vous avez besoin. Combinez cela avec ma réponse originale à utiliser one et vous serez tous ensemble:

Depuis les événements sont appelés dans l'ordre, vous pouvez ajouter votre méthode dans la file d'attente d'événements comme celui-ci:

$.getJSON('<%=Url.Action("JsonSave","Controler")%>', 
     { id: newRow.Id, personId: newRow.PesronId}, 
     function(data) { 
      $('#grid').one('gridComplete', function(){ $('#grid').editRow(rowCount); }); 
      $('#grid').trigger('reloadGrid'); 
     }) 

Utilisation de la place one de bind provoque l'utilisation de votre rappel d'événement qu'une seule fois.

+0

merci pour la mise à jour, je l'ai essayé mais encore aucun résultat, im gettin vraiment confus – CoffeeCode

0

Les appels asynchrones trigger() et editRow() sont-ils? Si c'est le cas, vous pourriez ne pas avoir de chance en le faisant de cette façon, car vous ne savez pas quand ils seront appelés.

Si vous avez besoin d'éditer editRow() après que trigger() soit terminé, appelez EditRow() à la fin de la fonction trigger() elle-même.

1

réponse Doug est juste sauf l'événement à utiliser est loadComplete

jQGrid documentation for events

+0

@Vinodh, à partir de la liste des événements, il semble que 'loadComplete' se déclenche après le retour de la demande XHR, mais avant la mise à jour de la grille. Son appel pour modifier la ligne échouerait car il serait mis à jour après la fin de l'événement. 'gridComplete' est l'événement correct AFAIK. –

+0

Dans mon expérience d'utilisation de jqGrid, j'ai toujours vu 'loadComplete' s'exécuter après' gridComplete'. Pas sûr de la raison. Mais dans le cadre de cette discussion, j'ai testé l'appel de 'editRow' et cela fonctionne s'il est placé dans les événements' gridComplete' ou 'loadComplete'. –

Questions connexes