jquery ajax return:undefined

Nig*_*box 10 jquery

我相信你知道这个问题,我仍然试图解决它几天.我尝试了很多东西,但没有人工作:

这是代码

function lobbyLeader() {
    $.ajax({
       data: {"id": 1, "request": "lobbyinfo", "method": "read"},
       url: 'api.php',
       dataType: 'json',
       success: function(data){
           result = data.leader;
           return result;
       }
   });
}
Run Code Online (Sandbox Code Playgroud)

alert(result);将显示,1但在使用其他功能时,它说undefined.

Nic*_*ver 12

你不能return从这样的异步函数,你从success回调函数返回,而不是父函数.相反,在回调中启动您需要的任何内容,如下所示:

function lobbyLeader() {
  $.ajax({
    data: {"id": 1, "request": "lobbyinfo", "method": "read"},
    url: 'api.php',
    dataType: 'json',
    success: function(data){
      someOtherFunc(data.leader);
   }
 });
}
Run Code Online (Sandbox Code Playgroud)


小智 6

正确地说,你不能真正从成功中返回,但是,如果你正在做我认为你正在做的事情,那就是获取数据并将其返回并将其分配给另一个区域中的某些东西 IE

var obj = 大堂领导();

然后,您可以将该函数设置为 async:false 并在代码运行完成后在 Success 之外返回 obj。例子

function lobbyLeader() {
var obj;
  $.ajax({
    async:false;
    data: {"id": 1, "request": "lobbyinfo", "method": "read"},
    url: 'api.php',
    dataType: 'json',
    success: function(data){
      obj= JSON.parse(data);
   }
 });
    return obj;
}
Run Code Online (Sandbox Code Playgroud)

这样脚本停止等待成功,然后设置并返回。


lon*_*day 5

这里的问题是 AJAX 是异步的(这就是第一个 A 代表的意思)。这意味着该函数立即返回;success仅当请求成功时才会调用处理程序。这意味着lobbyLeader在您发出请求后立即返回,因此不会返回任何内容。

如果您有任何代码需要在收到数据后运行,则必须将其放置在success处理程序(或另一个 AJAX 事件处理程序)中或由其调用。