2010-11-04 128 views
3

我有一个超过100行的表。jquery ajax调用循环一个又一个没有停止页面呈现

每一行由pdf文件及其与STATUS的最后一行的描述组成。

状态显示pdf文件是否可读不是。

一旦表格被加载到浏览器中,我就会从表格的每一行生成每个文件名并使用ajax调用来处理它。如果文件可读,我将该行的状态字段更新为READABLE。 处理每个pdf文件需要30秒到1分钟(取决于文件的大小)

我不想使用异步调用,并发送所有100的请求到我的服务器togather。

当我使用async = false。它会逐个执行每个ajax调用,这就是我想要做的, ,但同时它会停止用户浏览已加载的表。换句话说,用户有点卡住,直到所有这些Ajax请求完成。那么他可以向下滚动阅读更多信息。

我想让用户在后台读取网页,我希望一个接一个地执行ajax请求来处理pdf文件并更新其每一行的状态。

我该怎么做。

$('table.tableRecods tr').each(function(){ 

      fileWithPath = $('#filePath').text(); 
      $this = $(this); 
      $this.find('td.status img.cropStatus').attr('src', 'img/loader.gif') ;   
       $.ajax({ 
        url:'jsonCall.php', 
        async:false, 
        data: {file: escape(fileWithPath)}, 
        success: function(data){   

          if(data.status == 'true') { 
           $this.find('td.status img.readStatus').attr('src', 'img/icons/read.png') ;         
          }else if(data.status == 'false'){ 
           $this.find('td.status img.readStatus').attr('src', 'img/icons/__read.png') ; 

          } 
        } 
       }); 

    }); 
+0

我想这就是我在做什么。阅读这个问题。 – Developer 2010-11-04 15:14:32

回答

9

使用异步ajax。例如,您可以为要处理的所有表行创建一个数组,并从数组中取出第一个并开始查询。将代码放到侦听器中,当最后一个查询完成时开始下一个查询。

var toRequest=new Array("test1", "test2", "test3"); 
function doRequest(index) { 
    $.ajax({ 
    url:'jsonCall.php?data='+toRequest[index], 
    async:true, 
    success: function(data){   
     //do whatever you want do do 

     if (index+1<toRequest.length) { 
     doRequest(index+1); 
     } 
    } 
    }); 
} 
doRequest(0); 
+0

不会让脚本运行时浏览器繁忙。你能向我提供任何例子吗? – Developer 2010-11-04 15:16:18

+0

它不会。请阅读关于异步Ajax的一些信息。哦,我添加了一个例子。 – thejh 2010-11-04 16:09:00

+0

@thejh精湛,易于实施。谢谢!! – 2016-11-26 07:50:33