我正在尝试将数据添加到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]
为什么我得不能读?好像我的数据被添加到服务数组
答案 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)。