jQuery AJAX IE - 跳过函数ajax

时间:2012-05-18 04:40:37

标签: javascript jquery internet-explorer

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

在IE中,由于某种原因,$("#list").click()块内的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调用

1 个答案:

答案 0 :(得分:1)

您应该将async: false更改为async: true。对于async: false,在ajax调用完成之后,显示器的正常行为才会更新。所以这种改变可能足以解决它。否则请继续阅读...

我之前遇到过与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);
});