0
$("#multiselect").hide();
$("#multiselect_container").append('<img id="loader" src="/loader.gif" />');

$("#list").click()由于某种原因,在 IE 中跳过了块内的上述 2 个函数,而不是 FF,Chrome

$("#list").click(function() 
{           
    var selection = $(this).val();
    
    $("#multiselect").hide();
    $("#multiselect_container").append('<img id="loader" src="/loader.gif" />');

    $.ajax(
    {
        url: 'include/ajax.php?id='+selection,
        async: false,
        dataType: 'json',
        success: function (json) 
        {       
            $("#loader").remove();
            $("#multiselect").show();
                    
            //parse json
        } 
    });//json
});

这是怎么回事:

有一个按钮#list和一个容器#multiselect_container#multiselect它是容器大小的选择框。

单击时#list,选择框被隐藏并显示其下方的容器,并带有一个加载栏。

ajax 调用完成后,加载栏被移除,选择框再次显示。

在 Firefox 中,这工作得非常好。在 IE 中它没有。

我尝试过的事情:

  • $('#list').ajaxComplete(function() {});在成功部分

  • 休眠 php 文件 3 秒。相同的结果,除了延迟。

  • 删除 ajax 块,这两个调用正确进行。

  • 缓存不是问题,正在进行 ajax 调用

4

1 回答 1

1

您应该更改async: falseasync: true. 在ajax 调用完成之前,显示不更新async: false正常行为。因此,这种变化可能足以解决它。否则请继续阅读...

我以前在 IE 上遇到过类似的问题,它只是不想在执行 Ajax 时更新显示以显示“正在加载”类型的消息——即使 Ajax 是异步的。并不是函数本身被跳过,只是显示直到 Ajax 完成回调执行之后才会更新——并且由于完成处理删除了“加载”消息,就好像它从用户的角度来看从未存在过看法。与您的代码一样,我的项目在 Firefox 中运行良好。那是不久前的事了,但如果我没记错的话,我通过在 Ajax 调用中引入一个短暂的超时来让它在 IE 中工作,如下所示:

$("#list").click(function() 
{           
    var selection = $(this).val();

    $("#multiselect").hide();
    $("#multiselect_container").append('<img id="loader" src="/loader.gif" />');

    setTimeout(function() {
       $.ajax(
       {
           url: 'include/ajax.php?id='+selection,
           async: true,  // changed from false
           dataType: 'json',
           success: function (json) 
           {       
               $("#loader").remove();
               $("#multiselect").show();

               //parse json
           } 
       });//json
    }, 5);
});
于 2012-05-18T04:59:44.670 回答