Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.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 嵌套回调卡在循环中_Javascript_Jquery_Ajax_Callback - Fatal编程技术网

Javascript 嵌套回调卡在循环中

Javascript 嵌套回调卡在循环中,javascript,jquery,ajax,callback,Javascript,Jquery,Ajax,Callback,我有嵌套回调,设置如下: function submitForm() { BuildContent($('#Content').val(), '', true, submitForm) PerformSubmit(); } function BuildContent(textWithUrl, textSource, isSubmit, callback) { console.log("GetWebContent in Progress"); GetWebContent(s

我有嵌套回调,设置如下:

function submitForm() {
  BuildContent($('#Content').val(), '', true, submitForm)   
  PerformSubmit();
}

function BuildContent(textWithUrl, textSource, isSubmit, callback) {
  console.log("GetWebContent in Progress");
  GetWebContent(sendurls, BuildContent)
  console.log("GetWebContent done");
  callback();
}

function GetWebContent(content, callback) {
  $.ajax({....
    sucess:function(msg) { .....
      callback();
  }
}


预期结果是在调用submitForm时,它调用Build Conetent,而Build Conetent调用GetWebContent。o*只有在GetWebContent内部的ajax调用成功后,才执行Submit();执行。*由于某种原因,它会循环,JS挂起并变得无响应,BuildContent控制台日志会在循环中保持优先级。

在console.log之后调用的
BuildContent
回调是函数
submitForm
它会立即调用
BuildContent
,从而形成一个无休止的循环

如果不进行深入分析,我建议删除
BuildContent
末尾的调用
callback
,并将其作为调用的第二个参数传递给
GetWebContent


再仔细考虑一下,在
submitForm
中,您发送给
BuildContent
的回调应该是
PerformSubmit
。我对
buldContent
的更改仍然有效。

看来您对回调的工作方式有误解。当回调返回时,它不会在停止的地方继续执行。调用回调的函数立即完成

您需要这样构造代码:

function submitForm(){
    BuildContent($('#content').val(), '', true, performSubmit);
}

function BuildContent(textWithUrl, textSource, isSubmit, callback){
    console.log("GetWebContent in Progress");
    GetWebContent(sendurls, callback);
}

function GetWebContent(content,callback){
    $.ajax({...
        success:function(msg){ ....
            console.log("GetWebContent done");
            callback(); <-- performSubmit is being called here, 
                        after all of the asynchronous work is done
        }
    });
}
函数submitForm(){
BuildContent($('#content').val(),'',true,performSubmit);
}
函数BuildContent(textWithUrl、textSource、isSubmit、回调){
log(“GetWebContent进行中”);
GetWebContent(发送URL、回调);
}
函数GetWebContent(内容,回调){
$.ajax({。。。
成功:函数(msg){。。。。
log(“GetWebContent完成”);
回调();