如何作为父函数的结果返回嵌套ajax调用的结果?
//Declaring the function
var myFunction = function(myData){
$.ajax({
type:'post',
url:"/ajaxPage.php",
data:{data:myData},
success:function(r){
return r;
});
}
//Calling the function
var theResult = myFunction(myData);
我希望变量'theResult'能够保存ajax调用的内容。
答案 0 :(得分:6)
由于ajax是异步的,因此无法在父函数中返回它。 你可以做的是提供一个回调函数,你也可以用它来调用它。
//Declaring the function
var myFunction = function(myData, callback){
$.ajax({
type:'post',
url:"/ajaxPage.php",
data:{data:myData},
success:function(r){
callback(r);
});
}
//Calling the function
var theResult = myFunction(myData, function(res) {
// deal with it..
});
答案 1 :(得分:3)
如果您使用的是jQuery,那么您肯定应该使用$.Deferred()
和Promises/A
。我已经使这个更加冗长,你真的需要展示一些功能。 $.ajax
本身已经返回$.Deferred().promise()
,因此如果您只需要发出一个XHR请求,您实际上可以删除额外的步骤(参见下面的示例)。
//Declaring the function
var myFunction = function(myData){
var deferredResponse = new $.Deferred();
$.ajax({
type: 'post',
url: '/ajaxPage.php',
data: {'data': myData}
}).done(deferredResponse.resolve).fail(deferredResponse.reject);
return deferredResponse.promise();
}
//Calling the function
$.when(myFunction(myData)).done(function(response){
var theResult = response;
});
当您有多个嵌套的XHR请求并希望返回最内层调用的响应时,详细语法会派上用场:deferredResponse.resolve(innerResponse)
。这是简单的版本。
//Declaring the function
var myFunction = function(myData){
return $.ajax({
type: 'post',
url: '/ajaxPage.php',
data: {'data': myData}
});
}
//Calling the function
myFunction(myData).done(function(response){
var theResult = response;
});
答案 2 :(得分:1)
您必须使AJAX调用同步(不是默认的异步)。
这样的事情:
//Declaring the function
var myFunction = function(myData){
var returnValue = null;
$.ajax({
type:'post',
async: false,
url:"/ajaxPage.php",
data:{data:myData},
success:function(r){
returnValue = r;
});
return returnValue;
}
//Calling the function
var theResult = myFunction(myData);
答案 3 :(得分:1)
试试这个:
var myFunction = function(myData){
$.ajax({
type:'post',
url:"/ajaxPage.php",
data:{data:myData},
success:function(r){
return arguments.callee(r);
});
}
//Calling the function
var theResult = myFunction(myData);