Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS:从嵌套的ajax成功函数返回结果_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript JS:从嵌套的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

如何将嵌套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调用的内容。

您必须使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;
});