JQuery AJAX-запрос не завершен - PullRequest
1 голос
/ 01 ноября 2011

Я сталкиваюсь со странной проблемой, при которой запросы 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 для MPM для prefork и 300 для MPM для рабочих.

1 Ответ

1 голос
/ 01 ноября 2011

Похоже, вы эффективно заполняете свой веб-сервер.Вам следует использовать такой инструмент, как инструменты разработчика Firebug или Chrome, и посмотреть, сколько запросов ajax вы отправляете.

Я прошу, чтобы прямое событие в $('form#comments').live('submit', function(e) { запускалось несколько раз (проверьте его с помощью console.log('attaching live event');).Старайтесь избегать живых событий или, по крайней мере, добавьте класс в элемент привязанного события, чтобы можно было отфильтровать селектор живых событий, чтобы избежать привязки уже связанного.

Это должно работать:

$("form#comments:not(.live-submit-binded)")
   .addClass('live-submit-binded')
   .live('submit', function(e) {
    (...)
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...