0

我可能对这里实际发生的事情有误,但我有 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 的了解还不够,无法弄清楚到底发生了什么,但我的直觉告诉我,这两个帖子是同时发生的,而第二个帖子发生在第一个帖子完成之前。

4

1 回答 1

2

这是异步请求的本质。您不知道它们将以哪个顺序完成,因此您不能总是假设第一个请求的数据可用于第二个请求。

理想情况下,您的第二个请求应该在第一个请求的 onSuccess 回调函数中,并使用 onFailure/onError 函数处理程序来处理出现的任何问题。

于 2010-10-25T19:55:56.247 回答