首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法推送到javascript全局数组varible

无法推送到javascript全局数组varible
EN

Stack Overflow用户
提问于 2014-03-12 09:43:47
回答 2查看 352关注 0票数 0

我试图将数据添加到就绪函数中的全局数组变量中。当我稍后尝试使用数据时,数组是空的。

这是我的现成功能:

代码语言:javascript
复制
var counter = 0;
    var services = [];
    var names = []
    var serviceData = []
    $(document).ready(function () {
        $.getJSON(JSurl + "/Home/getServicesForCustomer?name=" + '@Model', function (data) {
            $.each(data, function (index, value) {
                console.log("Trying to push services : " + JSON.parse(value.jsonTEMPLATE).komponent);
                services.push(JSON.parse(value.jsonTEMPLATE).komponent);
                console.log("After push : " + services);
                names.push(value.Name);
                serviceData.push(value.jsonDATA);

            });
        });
        drawKomp(0);
    });

这是我想要使用数据的函数。

代码语言:javascript
复制
function drawKomp(index) {
        console.log("Services in draw" + services);
});

这是日志

代码语言:javascript
复制
Services in draw NewCustomerWizard?name=Testkund:104
Uncaught TypeError: Cannot read property 'length' of undefined jquery-2.0.3.js:564
Trying to push services : [object Object],[object Object] NewCustomerWizard?name=Testkund:90
After push : [object Object],[object Object] NewCustomerWizard?name=Testkund:92
Trying to push services : [object Object],[object Object],[object Object] NewCustomerWizard?name=Testkund:90
After push : [object Object],[object Object],[object Object],[object Object],[object Object] 

为什么我读不懂?似乎我的数据被添加到了服务数组中。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-12 10:03:37

正如Bojangles提到的,这是因为您的代码是异步执行的。

当JS解释器到达$.getJSON行时,浏览器发送一个请求以获取所需的数据。一旦服务器响应,回调函数就会被调用。但同时,在服务器响应之前,解释器到达drawKomp(0)。

由于ajax调用需要一些时间,如果解释器在这里停止执行,那就太疯狂了。这就是为什么提供回调函数的原因。

所以代码执行如下所示:

代码语言:javascript
复制
Send request to JSUrl and remeber function(data){...} to be executed when you got data
call drawKomp(0)
.
.
.
ajax call finished, call function(data){...}

因此,您必须确保在将数据推送到数组之前不会调用drawKomp(0)。

票数 2
EN

Stack Overflow用户

发布于 2014-03-12 10:10:33

解决这一问题的最简单方法是:

代码语言:javascript
复制
$(document).ready(function () {
    $.getJSON(JSurl + "/Home/getServicesForCustomer?name=" + '@Model', function (data) {
        $.each(data, function (index, value) {
            console.log("Trying to push services : " + JSON.parse(value.jsonTEMPLATE).komponent);
            services.push(JSON.parse(value.jsonTEMPLATE).komponent);
            console.log("After push : " + services);
            names.push(value.Name);
            serviceData.push(value.jsonDATA);

        });
        drawKomp(0);
    });

});

这样,在加载和处理json之后,drawKomp就会被执行。

您也可以使用延迟对象,但这可能会变得复杂。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22347452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档