我在网站上添加了一些AJAX和jQuery,最近我在进行AJAX调用时添加了一个加载图标。除非提交表单,否则它在IE和Firefox中都可以正常工作。 在这种情况下,仅适用于FF但不适用于IE。从我读到的内容来看,我知道这可能与JavaScript是单线程的事实有关,因此IE不会显示图片或显示图片但不会对其进行动画处理。我用这种行为,但我成功修复了它。所以我'想知道这次出了什么问题,但我没有看到,所以这是我的代码。
我将加载图片与AJAX事件绑定,因此每次调用都会显示:
$( document ).ready( function() {
update_rssfeed();
$("#preloader").bind("ajaxSend", function() {
$(this).show();
}).bind("ajaxStop", function() {
$(this).hide();
}).bind("ajaxError", function() {
$(this).hide();
});
});
然后,当在搜索表单的提交按钮上执行单击时,会有一个jQuery调用:
$(document).on('submit', '#search', function(event){
// some stuff in javascript
// ajax call
$.ajax({
async: false,
url: "somepage.php",
dataType: 'html',
success: function(data) {
// some stuff here
}
});
});
进行了AJAX调用,结果对于FF和IE都是正确的,但IE将显示加载图标,尽管上面有绑定,而FF会。
我在其他地方进行了其他的ajax调用,即使在IE中也能正常工作。 例如,这很好用(它是在链接上点击时调用的一种函数,用于刷新页面的某些部分):
function foo(args)
{
$.ajax({
async: true,
url: "somepage.php?" + args,
dataType: 'html',
success: function(data) {
// some stuff
}
});
}
所以,我的猜测是问题来自于我试图调用该函数的方式,但我不知道我该怎么做。
EDIT ---------------------------------------------- ------------------
解决方案是:
添加event.preventDefault();防止表单重定向
$(document).on('submit', '#search', function(event){
event.preventDefault();
// some stuff in javascript
// ajax call
$.ajax({
url: "somepage.php",
dataType: 'html',
success: function(data) {
// some stuff here
});
});