首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >同步优化ajax调用

同步优化ajax调用
EN

Stack Overflow用户
提问于 2012-09-07 02:14:26
回答 3查看 515关注 0票数 0

我有一些ajax脚本,可以发出大约250个同步PHP调用。这是我的脚本

代码语言:javascript
复制
$(document).ready(function(){ 
      $("#generate").html("<div class='modal'><p>Initializing...</p></div>");
      $.ajax({
          url:'/fetch around 250 url from database.php',
          async:false,
          dataType: 'json',        
          success: function(data){      
               $.each(data,function(key,val){
                    $("#generate").html("<div class='modal'><p>Fetching "+val.url+"</p></div>");
                    saveimage(val.url); 
              }
              $("#generate").html("<div class='modal'><p>done</p></div>");    
                    finalcreate();
          },
     });
   });
   function saveimage(){
        $.ajax({
             url: 'do some php work.php',
             async: false,
        });
    }
    function finalcreate(){
        $.ajax({
             url: 'do some php work.php',
             async: false,
         });
    }

在第一部分中,脚本从数据库中获取超过250个url,并使用另一个ajax调用为每个url脚本执行一些php计算。当循环结束时,脚本执行最后的ajax调用。

当我在firefox中运行这个程序时,它只成功运行了40个urls,然后浏览器显示了一个对话框,其中包含用户是否要停止此脚本的选项,如果用户想要运行此脚本,则该脚本将为接下来的40个urls再次运行,直到最后都是相同的过程。如何优化此脚本,我不希望浏览器显示选项停止此脚本。请帮帮忙。

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-09-07 02:29:24

试试这个:

代码语言:javascript
复制
function nextrequest() {
    if (requests.length == 0) {
        $("#generate").html("<div class='modal'><p>done</p></div>");
        finalcreate();
        return;
    }
    var val = requests.pop();
    $("#generate").html("<div class='modal'><p>Fetching "+val.url+"</p></div>");
    saveimage(val.url);
}
var requests = [];
$(document).ready(function(){
  $("#generate").html("<div class='modal'><p>Initializing...</p></div>");
  $.ajax({
      url:'/fetch around 250 url from database.php',
      dataType: 'json',
      success: function(data){
        requests = data;
           nextrequest();
      },
 });
});
function saveimage(){
    $.ajax({
         url: 'do some php work.php',
         success: function(data) {
            // do something...
            nextrequest();
         }
    });
}
function finalcreate(){
    $.ajax({
         url: 'do some php work.php',
     });
}

您将所有的URL存储在一个全局变量中,每次请求完成时,您都会获得下一个URL,直到所有的URL都被使用,(requests.length == 0),您将调用最后一个请求。

这样,用户仍然可以在页面上执行其他操作,而您可以在每次请求完成时显示进度。此外,一件好事是你可以一次调用2个或更多,以使过程更快。

票数 2
EN

Stack Overflow用户

发布于 2012-09-07 02:19:06

Ajax调用需要很长时间才能完成,因为它与远程服务器通信。最慢的事情是对服务器的查询。您应该向服务器发送一个包含所有需要的数据的批处理请求,服务器应该分离数据并处理它。所有的事情都应该快250倍左右完成。

票数 0
EN

Stack Overflow用户

发布于 2012-09-07 02:29:59

为每个ajax请求设置一定的时间间隔

代码语言:javascript
复制
 success: function(data){      
                   $.each(data,function(key,val){
                        $("#generate").html("<div class='modal'><p>Fetching "+val.url+"</p></div>");
                        setTimeout(saveimage(val.url),3000); 

                  }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12306005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档