jquery ajax一个接一个地调用循环而不停止页面呈现

时间:2010-11-04 14:44:41

标签: jquery ajax

我有一张超过100行的表。

每一行都包含pdf文件及其描述,最后一个是STATUS。

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

在浏览器中加载表格后,我将从表格的每一行开始计算每个文件名,并使用ajax调用对其进行处理。如果文件是可读的,我将该行的状态字段更新为READABLE。 处理每个pdf文件需要30秒到1分钟(取决于文件的大小)

我不想使用异步调用并将所有100个请求发送到我的服务器来收集。

当我使用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') ;

                            }
                    }
                }); 

    });

1 个答案:

答案 0 :(得分: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);