sai*_*vel 3 ajax concurrency jquery asynchronous
我有一个问题,如果我调用包含Ajax调用的函数并返回这些调用的结果,调用者总是在Ajax调用返回之前收到空返回值.
示例小提琴:ajax null返回值示例
var returnVal;
$.when(fun()).done(function(a1)
{
console.log("finished ajax");
returnVal = a1;
});
alert(returnVal);
function fun() {
$.ajax({//this ajax call should return an ip
url: 'http://ip.jsontest.com/',
data: "",
dataType: 'json',
success: function (data) {
console.log("fun(id) ajax success");
return data;
}
});
}
Run Code Online (Sandbox Code Playgroud)
您必须退回给定的延期$.ajax:
function fun() {
return $.ajax({//this ajax call should return an ip
Run Code Online (Sandbox Code Playgroud)
从文档中解释执行回调的原因:
如果将单个参数传递给jQuery.when()并且它不是Deferred或Promise,则它将被视为已解决的Deferred,并且所有附加的doneCallbacks将立即执行
您的代码中还有另一个问题:在异步调用完成之前您正在发出警报.你应该alert在回调中移动内部.
并且没有理由拥有成功函数,您可以在done回调中处理结果.
你不能真正alert成为一个对象并获得有意义的东西.你应该做alert(JSON.stringify(returnVal))或者使用console.log(不那么痛苦,点击F12来显示控制台).
$.when(fun()).done(function(a1){
console.log("finished ajax");
var returnVal = a1;
console.log(returnVal);
});
function fun() {
return $.ajax({//this ajax call should return an ip
url: 'http://ip.jsontest.com/',
data: "",
dataType: 'json'
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2280 次 |
| 最近记录: |