jQuery AJAX IE - skipped functions ajax

jQuery AJAX IE - skipped functions ajax

本文关键字:functions ajax skipped AJAX IE jQuery      更新时间:2023-09-26
$("#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 调用完成后,加载栏将被删除,选择框将再次显示。

在火狐中,这工作得很好。在IE中它没有。

我尝试过的事情:

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

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

  • 删除 ajax 块,可以正确进行这 2 次调用。

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

您应该将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);
});