所以我遇到了最奇怪的问题,在我公司的 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()
永远不会发生,如果有警告框,它会按预期运行。
processing() 和finished_processing()
function processing(){
$('#full_overlay').fadeIn();
$('#processing').fadeIn();
}
function finished_processing(){
$('#full_overlay').fadeOut();
$('#processing').fadeOut();
}
#full_overlay
是一个带有白色覆盖层的全屏固定 div。 #processing
是一个居中的 div,包含一个正在加载的 gif 和一个“请稍候...”字符串。
finished_processing()
不会发生,所以我认为 cmsalert()
没有任何相关性。 (cmsalert 在页面底部的一个 div 中滑动,包含一条通常是成功的消息)
最佳答案
尝试类似于 jquery docs 中的示例所示的操作,更改您的 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 .
关于javascript - 在特定计算机上没有警报就不会发生 AJAX 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8309274/