JQuery:强制页面停止,直到数据加载完毕

时间:2010-10-25 19:52:44

标签: asp.net asp.net-mvc telerik-grid telerik-mvc

我可能错在这里实际发生的事情,但我有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 个答案:

答案 0 :(得分:2)

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

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