我有这个方法:
function getUserName(guid) {
var name = "Unbekannt";
$.getJSON(urlCurrent, {
"method" : "get_user_info",
"guid" : guid,
"auth_token" : temporaryAuthToken
}, function(data) {
if (data.status == 0) {
alert(data.result[0].name);
name = data.result[0].name;
}
});
return name;
}
几乎所有工作都正常:Ajax-Request获取数据并触发回调函数,以便
alert(data.result[0].name);
显示一个带有此值的弹出窗口:“Forename Surname”
然后在
return name;
该方法返回“Unbekannt”,但名称应该具有新值“Forename Surname”。 发生了什么事,错误在哪里?
很多
答案 0 :(得分:4)
我会从函数中返回promise对象并对其进行操作。
function getUserName(guid) {
return $.getJSON(urlCurrent, {
"method" : "get_user_info",
"guid" : guid,
"auth_token" : temporaryAuthToken
});
}
getUserName(guid).done(function(data) {
if (data.status == 0) {
alert(data.result[0].name);
}
});
而且,如果你想在前面进行状态检查,那么就可以了。
function getUserName(guid) {
return $.getJSON(urlCurrent, {
"method" : "get_user_info",
"guid" : guid,
"auth_token" : temporaryAuthToken
}).then(function(data){
return $.Deferred(function(def){
if (data.status == 0) {
return def.resolve(data);
}
return def.reject(data);
});
});
}
getUserName(guid).done(function(data) {
alert(data.result[0].name);
});
答案 1 :(得分:3)
返回name
时,尚未为getJSON回调分配新值,因为ajax调用是异步的,需要一些时间才能完成。
您需要使用回调函数:
function getUserName(guid, callback) {
var name = "Unbekannt";
$.getJSON(urlCurrent, {
"method" : "coinor.get_user_info",
"guid" : guid,
"auth_token" : temporaryAuthToken
}, function(data) {
if (data.status == 0) {
alert(data.result[0].name);
name = data.result[0].name;
callback(name);
}
});
}
getUserName(guid, function(name) {
alert(name);
});
答案 2 :(得分:2)
因为在返回ajax调用之前执行了return name;
。
如果您希望它与$.getJSON()
调用中返回的数据相关,那么它也需要在回调函数中。