这是我从远程服务器获取请求数据的功能。一切都很好,但有一点。
function get_users_request()
{
var result = [];
var idx=0;
$.get("getUsers_actions.php",
function(data) {
for (var key in data)
{
result[idx++]=data[key];
console.log(data[key].login);
}
},
"json");
return result;
}
输出结果为:
hissou
hbadri
user_1
但是当我尝试获得get_users_request()
结果时,会给出一个空数组[]
。
答案 0 :(得分:1)
由于它是异步调用,因此在调用函数时需要使用回调函数:
function get_users_request(callback)
{
$.get("getUsers_actions.php", callback,"json");
}
get_user_request(function(data){
//var result = [];
//var idx=0;
//for (var key in data)
//{
// result[idx++]=data[key];
// console.log(data[key].login);
//}
$.each(data, function(k, v){
console.log(v.login);
});
});
要理解上面的代码,您可以使用超时模拟ajax调用:
var myAjaxResult;
setTimeout(function(){
myAjaxResult = 1; // try to update the value
}, 1000 /* simulates a 1 second ajax call */);
console.log(myAjaxResult); //undefined
由于console.log(myAjaxResult);
未包含在回调函数中,因此会立即调用它,因此仍未定义。
如果我们等待至少一秒钟,则会设置该值。但是,不是假定调用完成的时间,我们可以创建一个回调函数,并确切知道它何时完成:
function myFunc(callback){
setTimeout(function(){
callback(1 /* returns the value 1 to the callback */);
}, 1000 /* simulates a 1 second ajax call */);
}
myFunc(function(callbackData){ //call the function using
//the callback we just specified
console.log(callbackData);
});
希望这有帮助!如果有什么不清楚,请告诉我。
答案 1 :(得分:0)
这可以给出结果。
function get_users_request(s)
{
var s =new Array(), idx=0;
$.ajax({
url: "getUsers_actions.php",
success: function(data){
$.each(data, function(k, v){
s[idx++] = v.login;
console.log(v.login);
})
},
dataType: "json"
});
console.log(s);
}
答案 2 :(得分:-1)
您应该在return result;
循环之后放置for
。返回应在$ .get调用完成后完成。它现在在哪里,在$ .get调用STARTS后立即访问返回