【问题标题】:Array variable after calling $.ajax become empty [duplicate]调用 $.ajax 后的数组变量变为空 [重复]
【发布时间】:2013-09-10 11:45:04
【问题描述】:

我使用 ajax 将我的部门名称填充到一个数组中。在 $.each 期间,departmentName 有一个值,但在 ajax 结束后,当我记录 departmentName 时它没有值。

      $("#Search").click(function () {
            var titleId = $("#title").val();
            var departmentGenericId = $("#department").val();
            var startDate = $("#startDate").val();
            var endDate = $("#endDate").val();

            var departmentName = [];
            var complianceValue = [];
            var nonComplianceValue = [];
            var complianceRate = [];
            $.ajax({
                type: "GET",
                contentType: "application/json; charset=utf-8",
                url: '/AcknowledgementAdminLevel/AcknowledgemetnComplianceRate/',
                data: {"titleId": titleId, 
                    "departmentGenericId" : departmentGenericId, 
                    "startDate" : startDate,
                    "endDate" : endDate
                },
                dataType: "json",
                success: function (data) {                                       
                    $.each(data, function () {                            
                        departmentName.push(this.DepartmentName);
                        complianceValue.push(this.Compliance);
                        nonComplianceValue.push(this.NonCompliance);
                        complianceRate.push(this.ComplianceRate);                            
                    });
                }                   
            });               
            console.log(departmentName);               
        });       

【问题讨论】:

  • 这个问题每天被问无数次。提问前请先搜索一下。
  • 欢迎来到 Async 的精彩世界
  • 我很确定departmentName 确实有一个值,即[](空数组)。
  • ajax 调用是异步的。在调用者上下文中的下一条语句执行之前,您不能依赖它们来完成......实际上,您宁愿依赖相反的......
  • 再传递一个键值async:false 给ajax调用

标签: javascript jquery ajax


【解决方案1】:

ajax 调用是异步调用的,因此执行 console.log 语句时不会填充 departmentName。如果您真的想通过添加 async 选项来将 ajax 调用设置为同步执行,如下所示:

$.ajax({
        async: false,
        //...

到选项。然后,ajax 调用将在继续执行之前等待响应。

【讨论】:

  • 为什么在我们投票结束时链接到适当的质量检查之前很久才回答?顺便说一句,这是一个糟糕的答案,不推荐同步请求。
  • 我回答是因为他问了,而且我很清楚使用同步请求是不好的做法,因此“如果你真的想这样做,你可以将 ajax 调用设置为同步执行' - 缠绕你的脖子 - 我讨厌 SO 变得像 perl 社区。​​span>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-16
  • 1970-01-01
  • 2021-11-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多