Javascript 中断包含AJAX类型函数的for循环
我是Javascript的大傻瓜,这可能是一系列问题中的第一个 下面是我想做的: 我有一个包含几个.txt文件的文件夹,名为art1.txt、art2.txt等。总数可能会有所不同,这一点很重要 我正在构建一个脚本,它将提取每个txt文件的文本信息,并将它们一个接一个地附加到网页上。这是:Javascript 中断包含AJAX类型函数的for循环,javascript,jquery,ajax,Javascript,Jquery,Ajax,我是Javascript的大傻瓜,这可能是一系列问题中的第一个 下面是我想做的: 我有一个包含几个.txt文件的文件夹,名为art1.txt、art2.txt等。总数可能会有所不同,这一点很重要 我正在构建一个脚本,它将提取每个txt文件的文本信息,并将它们一个接一个地附加到网页上。这是: function init(){ for (var i=1; ; i++) { $(function doAjax (){ var getArt = { "method" : "get"
function init(){
for (var i=1; ; i++) {
$(function doAjax (){
var getArt = { "method" : "get",
"url" : "data/ConstitutionLaw/art" + i +".txt",
"success" : successHandler,
"error" : endLoop
};
$.ajax(getArt);
function successHandler(data){
console.log(data);
var newArt = document.createElement('p');
newArt.setAttribute('class', "article");
newArt.innerHTML = data;
$('#artBody').append(newArt);
}; //end of successHandler
}); //end of doAjax
function endLoop() { /* end the for loop */ };
}; //end of for
} //end of init
目前,我无限次地执行doAjax函数,因为我不知道我有多少个txt文件。如果代码没有找到文件artN.txt,我想通过执行endLoop函数来中断循环,这意味着文件夹中没有更多的文件
我尝试在函数doAjax之后使用if语句,但问题是它是一个异步函数,for循环不会在启动另一个循环之前等待doAjax结束
如何使for循环等到doAjax完成后再开始新的循环
此外,如果你有任何建议,使整体不那么笨拙,请让我知道
谢谢你的阅读 在do while循环中引入结束条件:
function init(){
var stopLooping = false;
do {
$(function doAjax () {
var getArt = { "method" : "get",
"url" : "data/ConstitutionLaw/art" + i +".txt",
"success" : successHandler,
"error" : endLoop
};
function successHandler(data) {
console.log(data);
var newArt = document.createElement('p');
newArt.setAttribute('class', "article");
newArt.innerHTML = data;
$('#artBody').append(newArt);
}; //end of successHandler
function endLoop() {
stopLooping = true;
};
}); //end of doAjax
$.ajax(getArt);
} while ( !stopLooping );
} //end of init
该代码的问题在于,ajax是异步运行的,它将发出另一个x次不成功的调用,直到从第一个错误处理程序返回时循环实际停止。这将帮助您完成所需的任务。尽管如此,我仍然建议使用服务器端脚本语言来更有效地实现这一点
function init(){
var stop = false;
for(var i=1; ; i++) {
$.ajax({
"async" : false,
"method" : "get",
"url" : "data/ConstitutionLaw/art" + i +".txt",
}).success(function(data){
console.log(data);
var newArt = document.createElement('p');
newArt.setAttribute('class', "article");
newArt.innerHTML = data;
$('#artBody').append(newArt);
}).fail(function(){
stop = true;
});
if(stop) {
break;
}
}
}
将for循环更改为do-while循环,然后错误地返回一个false变量。您可以使用递归。在这种情况下,您不必使用无限循环:您可以在一个请求中从服务器获取所有文件,并使用Javascript处理响应。此外,您还混合了大量Javascript/jquery。。你可以做新艺术系列。。。作为$'artBody'。追加“
”+数据+”
;