2012-12-16 97 views
2

这是我的问题。当我的主页显示时,我调用LoadUser函数,该函数成功设置返回JSON的globalUser变量。加载后,我会调用警报函数,但它说globalUser未定义。我尝试了许多其他解决方法,但我总是收到未定义的消息。Ajax请求结束前jQuery移动函数调用

如果我在成功函数上调用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

最新的问题是什么? –

+0

即使忽略了'$ .ajax()'调用的异步性质,您的'LoadUser()'函数也不会明确地返回一个值,这意味着它返回'undefined'。所以当你说'globalUser = LoadUser()'时,那么'globalUser'也设置为'undefined',所以你基本上说'$ .when(undefined)...' – nnnnnn

+0

所以我编辑了ajax来返回对象,仍然是'未定义' – rpmlins

回答

1

你并不需要$.when打扰你在你的情况下,只需要实现$.ajaxpageshow事件

$('#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

我不明白为什么你不取得成功竭尽所能功能。正如你自己所说,这是有效的。另外,您可以成功运行代码。在你的例子中,如果ajax调用出现问题,你应该显示“发生错误”提示,但是你的when()代码会假设成功。

与所有他这样说......

你显然意识到了Ajax的异步特性,但你用。当()不正确地解决它。()完成。 LoadUser()立即返回并返回null,而不是延迟。因此,.done()可能立即触发。

解决的办法是用.when($ .ajax())代替.when(LoadUser()),或者从LoadUser()返回$ .ajax(即延迟对象)的结果。 。

相关问题