Javascript JS:从嵌套的ajax成功函数返回结果
如何将嵌套ajax调用的结果作为父函数的结果返回?Javascript JS:从嵌套的ajax成功函数返回结果,javascript,jquery,ajax,Javascript,Jquery,Ajax,如何将嵌套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 = myFuncti
//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调用的内容。您必须使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);
因为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..
});
试试这个:
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);
如果您使用的是jQuery,那么肯定应该使用and。我已经把它做得更详细了,您确实需要演示一些功能<代码>$.ajax本身已经返回了一个
$.Deferred().promise()
,因此,如果只需要发出一个XHR请求,您实际上可以省去额外的步骤(参见下面的示例)
当您有多个嵌套的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;
});
他没有说一定要这样:)太棒了!谢谢你,汉西奇!非常有趣,我不知道您可以删除此函数的异步性质。还有其他jquery函数可以应用于此吗?使AJAX同步是向后的。适当的方法是将处理响应的代码转换为传递给myFunction`的延续,如José的回答所示。啊,参数.callee()函数是做什么的?它将调用它所在的函数self。正如标题所示,我们希望返回它,而不是“处理它”。就像这里:
//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;
});