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完成”);
回调();