Question

Je peux me tromper sur ce qui se passe réellement ici, mais j'ai 3 Html.dropdownlists. Et im en utilisant jquery au filtrage de poignée qui fait réellement le travail. Cependant, il y a un comportement bizarre que je pense peut-être parce que les données isnt terminé le chargement avant la prochaine fonction est appelée.

Par exemple:

Un peu d'histoire. Société: plusieurs bureaux Owns sur le terrain Bureau terrain: plusieurs facilties Owns Donc, logiquement, lorsque vous changez de compagnie, les bureaux extérieurs devraient changer, ce qui change alors 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, quand la page se charge, tout semble bien. Tous les DropDownLists ont les données correctes.

Quand je change la société, ce qui appelle.

$(function () {
        $('#CompanyId').change(function () {
            var cid = $(this).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);
            });
        });
    });

Cela change les bureaux extérieurs à la liste correcte, cependant des changements d'installations à bureaux tout terrain a été fixé à avant le changement de l'entreprise est survenue. Je ne sais pas assez sur jquery pour savoir exactement ce qui se passe, mais mon instinct me dit que les deux postes se produisent en même temps, et le second poste se produit avant que le premier est terminé.

Était-ce utile?

La solution

Il est de la nature d'une requête asynchrone .. vous ne savez pas quel ordre ils termineront en sorte que vous ne pouvez pas toujours supposer les données de la première sera disponible à la seconde.

Idéalement, votre deuxième demande doit être dans la fonction de rappel onSuccess de la première demande, avec un gestionnaire de fonctions onFailure / onError pour prendre soin de tous les problèmes qui se posent.

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