JQuery: принудительная остановка страницы до завершения загрузки данных - PullRequest
0 голосов
/ 25 октября 2010

Я могу ошибаться в том, что на самом деле происходит здесь, но у меня есть 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, чтобы точно понять, что происходит, но мой инстинкт подсказывает мне, что эти два сообщения происходят одновременно, и второе сообщение происходит до того, как закончится первое.

1 Ответ

2 голосов
/ 25 октября 2010

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

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

...