2011-11-01 163 views
1

我正面临一个奇怪的问题,其中ajax请求没有完成,当后续的请求被做出。jQuery ajax请求没有完成

当第一次加载网页时,ajax调用正常工作。但是如果我在不刷新页面的情况下调用相同的方法,那么请求永远不会完成,甚至Apache也没有响应。我检查apache的错误日志,发现如下条目:

[Tue Nov 01 16:41:42 2011] [error] server reached MaxClients setting, consider raising the MaxClients setting 

这里是我试图执行jQuery代码:

(function($) { 
    $(function(){ 

     form = $('form.crud'); 
     $("#end_date").datepicker({dateFormat: 'yy-mm-dd'}); 

/** Contract Comments **/ 
     $('#actionbar ul li:nth-child(1) a').colorbox({ 
      scrollable: false, 
      innerWidth: 600, 
      innerHeight: 280, 
      href: SITE_URL + 'admin/contracts/comments/create_ajax', 
      onComplete: function() { 
       $.colorbox.resize(); 
       $('form#comments').removeAttr('action'); 
       $('form#comments').live('submit', function(e) { 
        var form_data = $(this).serialize(); 

        $.ajax({ 
         url: SITE_URL + 'admin/contracts/comments/create_ajax', 
         type: "POST", 
          data: form_data, 
         success: function(obj) { 
          if(obj.status == 'ok') { 
           $.colorbox.close(); 
          } else { 
           $('#cboxLoadedContent').html(obj.message + obj.form); 
           $('#cboxLoadedContent p:first').addClass('notification error').show(); 
          } 
         } 
        }); 
        e.preventDefault(); 
       }); 
      } 
     }); 
    }); 
})(jQuery); 

看来浏览器充斥多余的请求的服务器。是否是有意义的增加MaxClients的数(目前为256 prefork的MPM和300工人MPM。

回答

1

看来你有效地充斥你的网络服务器,你应该使用类似Firebug或Chrome开发者工具的工具,并有看看你发送的阿贾克斯请求的数量

我在$('form#comments').live('submit', function(e) {中的现场活动正在运行几次(用console.log('attaching live event');来检查它)尝试避免直播活动或至少在你的绑定事件中添加一个类元素,以便您可以过滤现场事件选择器,以避免绑定已绑定的事件。

This should work:

$("form#comments:not(.live-submit-binded)") 
    .addClass('live-submit-binded') 
    .live('submit', function(e) { 
    (...) 
}); 
+0

我将console.log添加到live函数并重新测试它。下面是我发现的行为:在第一次请求期间,一切正常,并且单个请求正常工作,并且在完成ajax请求后,colorbox被关闭。第二个请求也完成了,但这次有两个请求被发送到服务器。第三个要求根本没有完成。我需要更好地理解live()方法,然后再回到你身边。 – libregeek