我正在使用此代码检索一个简单的JSON对象:
function userinfo() {
var user = new Object();
$.getJSON('###', function(data){
user.id = data.user.uID;
user.name = data.user.uname;
});
return user;
}
var user = userinfo();
console.log(user);
当我在函数外部的用户对象上运行console.log时,我可以看到对象的属性(id,name)。但是当我尝试使用console.log“user.id”或“user.name”时,它们会显示为未定义。我无法弄清楚为什么会这样,或者我可以做什么来检索属性而不必迭代它们。
有什么建议吗?
答案 0 :(得分:4)
获取JSON的AJAX调用是异步的,在AJAX返回之前不会调用回调function(data)
,但是在发送AJAX请求之后,但在AJAX之前,您正在读取user
收到回复。
试试这个:
function userinfo() {
$.getJSON('###', function(data){
var user = new Object();
user.id = data.user.uID;
user.name = data.user.uname;
// Do your stuff here
console.log(user);
});
}
userinfo();
回答评论: 只需在应用程序上有这样的功能:
function processUser(user){
console.log(user);
}
然后在AJAX回调中使用它,
$.getJSON('###', function(data){
var user = new Object();
user.id = data.user.uID;
user.name = data.user.uname;
// Do your stuff here
processUser(user);
});
@Simon,您现在可以在processUser()
中执行常规应用程序逻辑,例如:
var usersList = []; // Assume this is a global for your app
function processUser(user){
usersList.push(user);
// now other parts of your app can find this user in the list
}
答案 1 :(得分:1)
function userinfo(callback) {
$.getJSON('###', function(data){
callback({
id: data.user.uId,
name: data.user.uname
});
});
}
var user;
userinfo(function(newUser) {
user = newUser;
// do work with user.
});
// execution continues here before callback returns. User will not be set.
user.name // error no property name of undefined.
答案 2 :(得分:0)
以下是修复:
function userinfo() {
var user = new Object();
$.ajax({
async: false, //solution right here
url: '/login/user.html',
success: function (data) {
user.id = data.user.uID;
user.name = data.user.uname;
}
});
return user;
}
var user = userinfo();
console.log(user.id);
完美无缺。