Domanda

I potrebbe essere sbagliata su ciò che sta realmente accadendo qui ma ho 3 Html.dropdownlists. E im utilizzando jQuery per il filtraggio maniglia che funziona veramente. Tuttavia, v'è un comportamento strano e penso che potrebbe essere perché i dati isnt carico finito prima che la funzione successivo è chiamato.

Per esempio:

Alcuni retroscena. Società: possiede diversi uffici sul campo Field Office: possiede diversi facilties Così logicamente, quando si cambia società, uffici di campo dovrebbe cambiare, che poi cambia strutture.

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

Ora, quando la pagina viene caricata, tutto sembra bene. Tutte le DropDownList hanno i dati corretti.

Quando cambio società, ciò richiede.

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

Questo cambia gli uffici di campo per l'elenco corretto, servizi, tuttavia le modifiche a tutto ciò che gli uffici di campo è stato impostato prima della modifica società si è verificato. Non so abbastanza di jQuery per capire esattamente cosa sta succedendo, ma il mio istinto mi dice che i due posti stanno accadendo allo stesso tempo, e il secondo post avviene prima che il primo è finito.

È stato utile?

Soluzione

E 'la natura di una richiesta asincrona .. non si sa quale ordine finiranno in modo da non si può assumere sempre i dati dal primo sarà disponibile per la seconda.

Idealmente, la tua seconda richiesta dovrebbe essere all'interno della funzione di callback onSuccess della prima richiesta, con un gestore di onFailure / onError funzione di prendersi cura di eventuali problemi che si presentano.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top