我可能错在这里实际发生的事情,但我有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是否知道究竟发生了什么,但我的直觉告诉我两个帖子同时发生,第二个帖子发生在第一个帖子完成之前。
答案 0 :(得分:2)
这是异步请求的本质..你不知道他们将完成哪个顺序,因此你不能总是假设第一个的数据可用于第二个。
理想情况下,您的第二个请求应位于第一个请求的onSuccess回调函数中,并使用onFailure / onError函数处理程序来处理出现的任何问题。