JQuery: принуждая страница, чтобы остановить, пока данные не закончат загрузка

StackOverflow https://stackoverflow.com/questions/4018293

Вопрос

Я мог бы ошибаться о том, что на самом деле происходит здесь, но у меня есть 3 html.dropdownlists. И я использую jQuery для обработки фильтрации, которая на самом деле работает. Тем не менее, есть какое-то странное поведение, которое, я думаю, может быть, потому что данные не закончили загрузку до вызова следующей функции.

Например:

Какой-то фон. Компания: владеет несколько полевых офисов полей.

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

Теперь, когда страница загружает, все выглядит хорошо. Все выпадающие списки имеют правильные данные.

Когда я меняю компанию, это звонки.

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

Это изменяет команды полевых отделений в правильный список, однако изменения изменений в любых полевых отделениях были установлены до того, как произошло произошедшие изменения компании. Я не знаю достаточно о jQuery, чтобы выяснить, что происходит, но мой инстинкт говорит мне, что два поста происходят одновременно, а второй пост происходит до того, как первый закончен.

Это было полезно?

Решение

Это природа асинхронного запроса .. Вы не знаете, какой заказ они закончат, поэтому вы не можете всегда предполагать, что данные с первого будут доступны второму.

В идеале ваш второй запрос должен быть в функции обратного вызова ONSUCCESS в первом запросе с функцией OnFailure / OneRror, чтобы позаботиться о любых проблемах, которые возникают.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top