无法推送到javascript全局数组变量

时间:2014-03-12 09:43:48

标签: javascript jquery arrays

我正在尝试将数据添加到ready函数中的全局数组变量中。当我后来尝试使用数据时,我的数组是空的。

这是我的准备功能:

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);
    });

这是我想要使用我的数据的功能。

function drawKomp(index) {
        console.log("Services in draw" + services);
});

这是日志

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] 

为什么我得不能读?好像我的数据被添加到服务数组

1 个答案:

答案 0 :(得分:2)

正如Bojangles所说,这是因为你的代码是异步执行的。

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

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

因此代码执行如下所示:

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)。