2012-08-28 25 views
0

我可能失去了一些东西简单,但鉴于这个JS代码:搭售Web服务调用的结果返回给调用函数在Javascript

var WS = { 
    whoami: function() { 
     var toReturn; 
     $.getJSON("/SecurityData/GetCurrentUser", function (data) { 
      toReturn = data.Email; 
     }); 

     return toReturn; 
    } 
} 

当我称呼它,如果我把一个断点在toReturn = data.Email ,预期的数据在那里,但如果不是WS.whoami是未定义的。

我认为这是因为$.getJSON调用是异步的,但我怎样才能获得预期的效果?

回答

1

Ajax是异步的并返回一个promise对象。相反,返回promise对象并向其添加回调。

var WS = { 
    whoami: function() { 
     return $.getJSON("/SecurityData/GetCurrentUser"); 
    } 
}; 

WS.whoami().done(function(data){ 
    alert(data.Email); 
}); 

唯一的其他选择是使其同步请求,但是我不推荐,由于影响它会对你的UX。您将不得不使用$.ajaxasync:false

0

更好的解决方案是用回调调用你的函数。这样,你的代码保持异步,并在json调用完成时继续。

var WS = { 
    whoami: function (callback) { 
     $.getJSON("/SecurityData/GetCurrentUser", callback); 
    } 
} 

WS.whoami(function(data) { 
    // code that uses var data 
}); 
相关问题