使用IE提交表单时,加载图标不显示,但FireFox很好

时间:2013-11-23 18:23:25

标签: jquery ajax internet-explorer firefox preloader

我在网站上添加了一些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 ---------------------------------------------- ------------------

解决方案是:

  • put" async" to" true"
  • 添加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
    });
    });
    

0 个答案:

没有答案