2010-10-25 2 views
0

Je peux me tromper sur ce qui se passe réellement ici mais j'ai 3 Html.dropdownlists. Et j'utilise jquery pour gérer le filtrage qui fonctionne réellement. Cependant, il y a un comportement étrange que je pense pourrait être parce que les données ne sont pas finies de chargement avant que la fonction suivante soit appelée. Par exemple:JQuery: Forcer l'arrêt de la page jusqu'à la fin du chargement des données

Un peu d'arrière-plan. Société: Possède plusieurs bureaux extérieurs Bureau de terrain: Possède plusieurs facilités Donc, logiquement, lorsque vous changez d'entreprise, les bureaux de terrain doivent changer, ce qui change ensuite les installations.

$(function() { 
     $(document).ready(function() { 
      var cid = $("#CompanyId").val(); 
      $.post("/ManifestSearch/GetFilteredFieldOffices", { id: cid }, function (data) { 
       $("#FieldOfficeId").loadSelect(data); 
      }); 
      var fid = $("#FieldOfficeId").val(); 
      $.post("/ManifestSearch/GetFilteredFacilities", { id: fid }, function (data) { 
       $("#FacilityId").loadSelect(data); 
      }); 
     }); 
    }); 

Maintenant, lorsque la page se charge, tout semble bien. Toutes les listes déroulantes ont les données correctes.

Lorsque je change de compagnie, cela appelle. Cela change les bureaux de terrain pour la liste correcte, cependant les installations changent à tous les bureaux de terrain a été défini avant que le changement de la société ait eu lieu. Je ne sais pas assez sur jquery pour comprendre exactement ce qui se passe, mais mon instinct me dit que les deux messages se produisent en même temps, et le deuxième post arrive avant que le premier soit fini.

Répondre

2

C'est la nature d'une requête asynchrone ... vous ne savez pas dans quel ordre ils vont finir, donc vous ne pouvez pas toujours supposer que les données de la première seront disponibles pour la seconde.

Idéalement, votre deuxième requête devrait se trouver dans la fonction de rappel onSuccess de la première requête, avec un gestionnaire de fonction onFailure/onError pour résoudre les problèmes éventuels.

+0

J'ai vu quelque part que vous pouvez définir async à false. Est-ce vrai? –

+0

J'ai compris. J'ai mis l'appel du second contrôleur à l'intérieur du succès du premier. Merci! –

+0

Notez également: il existe des plugins jQuery qui mettent en file d'attente les requêtes ajax à recevoir dans l'ordre. J'ai personnellement utilisé et apprécié http://www.protofunc.com/scripts/jquery/ajaxManager/ – Jono

Questions connexes