所以我遇到了最棘手的问题,在我公司的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中滑动,其中包含 - 通常是成功 - 消息)
答案 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。