我有以下源代码:
var labeled_pic = new Array();
var testing;
function get_label_pic(){
$.ajax({
url: "localhost/advanceSearch/index/getlabelpic",
type: "POST",
dataType: "json",
success: function(data) {
$.each(data, function(key, data){
labeled_pic[key] = data;
});
testing = "testing";
}
});
};
get_label_pic();
console.log(labeled_pic);
然后我使用get_label_pic();
调用这些函数,之后我想使用labeled_pic
访问labeled_pic[3]
数组,但它返回undefined
。我使用firebug,我尝试写这个console.log(labeled_pic)
,然后返回:
如何访问labeled_pic变量,。?
答案 0 :(得分:2)
问题在于您正在进行异步调用(AJAX请求),因此您的JavaScript会继续,并且不会等待调用返回。
因此,对get_label_pic()
的通话将毫不犹豫,您的代码将继续直接转到console.log(labeled_pic)
(尚未设置,因为您的success
回调AJAX调用将不会完成。
如果你想要我们,那么你需要将你的代码放入你的AJAX成功,或者从中调用另一个函数:
function get_label_pic(){
$.ajax({
url: "localhost/advanceSearch/index/getlabelpic",
type: "POST",
dataType: "json",
success: function(data) {
$.each(data, function(key, data){
labeled_pic[key] = data;
});
testing = "testing";
console.log(labeled_pic); // this will show the values
callmyOtherFunction(); // To call something else
}
});
};
get_label_pic();
console.log(labeled_pic); // This will be undefined
实际发生的是:
get_label_pic()
console.log
labeled_pic[key]
testing = 'testing'
console.log(labeled_pic);
callmyOtherFunction()
答案 1 :(得分:1)
由于您的ajax调用是异步的,因此在ajax调用完成之前,您很可能会尝试读取数组。如果您创建了一个在ajax-call完成时触发的回调函数,并将您的代码放在该回调中,那么在您尝试访问该数组之前,您确定ajax调用已完成。
function get_label_pic(){
$.ajax({
url: "localhost/advanceSearch/index/getlabelpic",
type: "POST",
dataType: "json",
success: function(data) {
$.each(data, function(key, data){
labeled_pic[key] = data;
});
testing = "testing";
},
complete: doWhatYouWantToDo()
});
};
function doWhatYouWantToDo()
{
alert(labled_pic[3]); // <!-- now the array is populated
}
答案 2 :(得分:0)
该函数是一个闭包,因此标记为pic已超出范围。
如果将它作为参数传递给回调函数,它将封装在闭包中,并在执行回调时可用。
HTH
答案 3 :(得分:0)
你必须调用console.log(labeled_pic);在$ .ajax的成功回调中
...
success: function(data) {
$.each(data, function(key, data){
labeled_pic[key] = data;
});
testing = "testing";
//here call the console.log
}
...
答案 4 :(得分:0)
您必须在成功函数结束时执行该代码,因此您的代码必须如下所示:
var labeled_pic = new Array();
var testing;
function get_label_pic(){
$.ajax({
url: "localhost/advanceSearch/index/getlabelpic",
type: "POST",
dataType: "json",
success: function(data) {
$.each(data, function(key, data){
labeled_pic[key] = data;
});
testing = "testing";
$("#result").append("<img src='" + labeled_pic[3] +"' />");
}
});
};
get_label_pic();