2

这是我的问题。当我的主页显示时,我调用 LoadUser 函数,该函数在成功globalUser时使用返回的 JSON 设置变量。加载后我调用警报函数,但它说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.");
    }
  });
}
4

2 回答 2

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.");
    }
  });
});
于 2012-12-16T08:38:47.617 回答
1

我不明白为什么您不在成功功能中做所有事情。正如你自己所说,这行得通。此外,您还可以成功运行代码。在您的示例中,如果 ajax 调用出现问题,您将显示“发生错误”警报,但您的 when() 代码将假定成功。

说了这么多……

您显然意识到 ajax 的异步特性,但是您使用 .when().done() 错误地解决了它。LoadUser() 立即返回,它返回 null,而不是延迟。因此, .done() 可能会立即触发。

解决方案是如示例中那样将 .when(LoadUser()) 替换为 .when($.ajax()),或者从 LoadUser() 返回 $.ajax 的结果(即延迟对象)。

于 2012-12-16T10:00:48.297 回答