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 中断包含AJAX类型函数的for循环_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript 中断包含AJAX类型函数的for循环

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"

我是Javascript的大傻瓜,这可能是一系列问题中的第一个

下面是我想做的:

我有一个包含几个.txt文件的文件夹,名为art1.txt、art2.txt等。总数可能会有所不同,这一点很重要

我正在构建一个脚本,它将提取每个txt文件的文本信息,并将它们一个接一个地附加到网页上。这是:

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'。追加“

”+数据+”