Frage

Ich könnte falsch sein, was tatsächlich geschieht hier, aber ich habe 3 Html.dropdownlists. Und im Griff zu Filtern mit Jquery, die tatsächlich funktionieren. Allerdings gibt es einige seltsame Verhalten, das ich denke, könnte sein, weil Daten fertig geladen ist nicht, bevor die nächste Funktion aufgerufen wird.

Zum Beispiel:

Einige Hintergrundinformationen. Firma: Owns mehrere Außenstellen Field Office: Owns mehrere facilties So logisch, wenn Sie Unternehmen zu ändern, Feldbüros ändern sollte, die dann ändert Einrichtungen.

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

Nun, wenn die Seite geladen wird, sieht alles in Ordnung. Alle die Dropdownlists haben die richtigen Daten.

Wenn ich Unternehmen ändern, diese Anrufe.

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

Dies ändert die Feldbüros in der richtigen Liste jedoch Einrichtungen Änderungen zu, was Außenstellen zu gesetzt wurde, bevor das Unternehmen Wechsel aufgetreten. Ich weiß nicht genug über jquery, genau herauszufinden, was los ist, aber mein Instinkt sagt mir, dass die beiden Beiträge zur gleichen Zeit geschehen, und der zweite Eintrag geschieht, bevor die erste fertig ist.

War es hilfreich?

Lösung

Es liegt in der Natur einer asynchronen Anfrage .. Sie nicht wissen, in welcher Reihenfolge sie in beenden, so dass Sie nicht immer die Daten aus dem erst man davon ausgehen, werden die zweiten zur Verfügung.

Im Idealfall Ihre zweite Anforderung innerhalb der onSuccess Callback-Funktion der ersten Anforderung sein sollte, mit einer onFailure / onError Funktion Handler von Problemen zu kümmern, die entstehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top