2011-11-01 164 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