这是我的问题。当我的主页显示时,我调用了LoadUser函数,该函数在成功时使用返回的JSON设置globalUser
变量。加载后我调用了alert函数,但是globalUser
未定义。我尝试了很多其他的解决方法,但我总是得到未定义的消息。
如果我在成功函数上调用alert(globalUser);
,它会按预期工作,提醒对象。
$('#Home').live('pageshow', function(event) {
$.when(LoadUser()).done(function(a1) {
alert(globalUser);
});
});
function LoadUser() {
$.ajax({
// connects with the web service and validate de user input
url: "http://localhost:51396/Icademy.asmx/GetUser",
contentType: "application/json; charset=utf-8",
data: { "userName": "'rodrigo'" },
dataType: "jsonp",
success: function(json) {
globalUser = JSON.parse(json.d);
return globalUser;
},
error: function(ret) {
alert("Um erro ocorreu, tente novamente mais tarde.");
}
});
}
答案 0 :(得分:1)
在您的情况下,您无需为$.when
打扰,只需在$.ajax
事件中实施pageshow
$('#Home').live('pageshow', function(event) {
$.ajax({
// connects with the web service and validate de user input
url: "http://localhost:51396/Icademy.asmx/GetUser",
contentType: "application/json; charset=utf-8",
data: { "userName": "'rodrigo'" },
dataType: "jsonp",
success: function(json) {
globalUser = JSON.parse(json.d);
alert(globalUser)
},
error: function(ret) {
alert("Um erro ocorreu, tente novamente mais tarde.");
}
});
});
答案 1 :(得分:1)
我不明白你为什么不在成功函数中做所有事情。正如你自己说的,这是有效的。此外,您还可以在成功时运行代码。在您的示例中,如果ajax调用出现问题,您将显示“发生错误”警报,但随后您的when()代码将成功。
所有这一切......
你显然意识到ajax的异步性质,但你用.when()。done()错误地解决了它。 LoadUser()立即返回,它返回null,而不是延迟。因此,.done()可能会立即触发。
解决方案是使用.when($。ajax())替换.when(LoadUser()),如示例所示,或者从LoadUser()返回$ .ajax(即延迟对象)的结果。