如果没有特定计算机上的警报,AJAX调用就不会发生

时间:2011-11-29 10:31:14

标签: javascript jquery ajax internet-explorer

所以我遇到了最棘手的问题,在我公司的CMS中,我们有一个新闻通讯系统,可以通过AJAX调用来发送电子邮件。现在,这适用于所有操作系统上的所有现代浏览器,但不适用于一个客户端。

这个客户端使用的是Windows 7和IE9,我自己使用Windows 7并尝试使用IE9(即使使用所有兼容模式),但它始终有效。

我不知道为什么它对他们不起作用,但是我能够通过在AJAX调用之前和之内放置一个alert来“修复”它。

我认为它必须与他们的硬件或连接有关,并且希望有人可能有解释。这是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()永远不会发生,警报框会按预期运行。

处理() finished_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 :(得分:0)

尝试jquery docs中的示例show,更改您的finished_processing函数,如:

function finished_processing(){

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

}

如果客户连续多次点击,您可能还会遇到问题,请记住这一点。我相信$.post()的返回也可以在同一行($.post().promise()$.post().done)中使用,以防您可以存储在变量中并使用它。您可能还想查看Deferred Object