在Ajax请求结束之前调用jQuery移动函数

时间:2012-12-16 04:51:22

标签: android jquery cordova jquery-mobile

这是我的问题。当我的主页显示时,我调用了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.");
    }
  });
}

2 个答案:

答案 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(即延迟对象)的结果。