我相信你知道这个问题,我仍然试图解决它几天.我尝试了很多东西,但没有人工作:
这是代码
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)
这样脚本停止等待成功,然后设置并返回。
这里的问题是 AJAX 是异步的(这就是第一个 A 代表的意思)。这意味着该函数立即返回;success仅当请求成功时才会调用处理程序。这意味着lobbyLeader在您发出请求后立即返回,因此不会返回任何内容。
如果您有任何代码需要在收到数据后运行,则必须将其放置在success处理程序(或另一个 AJAX 事件处理程序)中或由其调用。
| 归档时间: |
|
| 查看次数: |
59195 次 |
| 最近记录: |