Вызов AJAX не происходит без предупреждения на конкретном компьютере - PullRequest
2 голосов
/ 29 ноября 2011

Итак, у меня самая странная проблема: в CMS моей компании есть система новостных рассылок, которая выполняет вызов AJAX для отправки электронной почты.Теперь это прекрасно работает во всех современных браузерах во всех операционных системах, но не для одного клиента.

Этот клиент использует Windows 7 и IE9, у меня есть Windows 7 и я пробовал IE9 (даже со всеми режимами совместимости)) но это всегда будет работать.

Я не знаю, почему это не работает для них, однако я смог "исправить" это, поместив alert до и внутри вызова AJAX.

Я думаю, что это должно быть что-то с их оборудованием или подключением, и надеялся, что у кого-то может быть объяснение.Вот вызов AJAX (с предупреждениями), поэтому вы можете видеть, что в этом нет ничего плохого (верно?):

$('#send_single').unbind().click(function(event) {
    event.preventDefault();
    processing();               
    alert('one');

    $.post(
        'newsletter/ajax.php', 
        {   
            action: 'send_single', 
            email: $('#single_email').val(), 
            template: $('#select_template').val(), 
            id: $('#select_newsletter').val()
        }, 
        function(data) {
            alert('two');
            finished_processing();      
            cmsalert(data);
        }
    );
});

processing() исчезает в блоке обработки, который finished_processing() затем удаляется.Без блоков предупреждений finished_processing() никогда не происходит, а с окнами предупреждений он работает так, как ожидалось.

processing () и finish_processing ()

function processing(){

    $('#full_overlay').fadeIn();
    $('#processing').fadeIn();

}

function finished_processing(){

    $('#full_overlay').fadeOut();
    $('#processing').fadeOut();

}

#full_overlay - полноэкранный фиксированный div с белым наложением.#processing - это центрированный div, содержащий загрузочный gif и строку «Please wait ...».

finished_processing() не происходит, поэтому я не думаю, что cmsalert() каким-либо образом связан,(cmsalert скользит в div в нижней части страницы, содержащей - обычно успешное - сообщение)

1 Ответ

0 голосов
/ 29 ноября 2011

Попробуйте что-то похожее на пример, показанный в jquery docs , изменив вашу функцию Finish_Processing, например:

function finished_processing(){

    $('#full_overlay').promise().done(function() { this.fadeOut(); });
    $('#processing').promise().done(function() { this.fadeOut(); });

}

Вы также можете столкнуться с проблемами, если клиент нажимает несколько раз подряд, сохраните этов уме.Я считаю, что возвращение $.post() может также использоваться в тех же строках ($.post().promise() или $.post().done), если вы можете сохранить переменную и использовать ее.Вам также может понравиться Отложенный объект .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...