JQuery: принуждая страница, чтобы остановить, пока данные не закончат загрузка
-
26-09-2019 - |
Вопрос
Я мог бы ошибаться о том, что на самом деле происходит здесь, но у меня есть 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, чтобы позаботиться о любых проблемах, которые возникают.