IE不会触发jQuery Ajax的成功

时间:2009-04-23 16:33:00

标签: jquery ajax internet-explorer

我正在编写一个脚本,使用jQuery加载一些图像异步。

以下是加载图片的函数的代码片段 -

try{
    for(img in imgsArray){
        $.ajax({    
            async: false,
            type: "get",
            url:imgsArray[img],
            success:function(imgFile){
                alert("success");
                //do something useful
            },
            error:function(XMLHttpRequest,status,error){
                //do nothing
            }
        });//ajax
    } 
}
catch(e){
    //oops
}

我已经在Firefox,Webkit(Safari,Chrome)中对此进行了测试,但它确实有效。

图像位于服务器上的文件夹中,我正在使用jQuery 1.3。

任何想法?

13 个答案:

答案 0 :(得分:17)

此问题的一个简单修复是提供jQuery设置dataType : 'text'dataType : 'xml'dataType : 'json'或任何其他可用的响应类型。

我遇到了同样的问题,但在.ajax调用中指定了dataType设置后,它工作正常。

IE实际上不是智能浏览器,它不会采用默认值字符串。

试试吧......祝你好运。

答案 1 :(得分:11)

尝试将cached-option设置为false。

   $.ajax({        
            async: false,
            cache: false, 
            type: "get",
            url:imgsArray[img],
            success:function(imgFile){
                    alert("success");
                    //do something useful
                    },
                    error:function(XMLHttpRequest,status,error){
                    //do nothing
            }
    });//ajax

答案 2 :(得分:7)

我遇到了类似的问题 - 如果IE无法将响应解析为xml,IE似乎会触发失败,即使请求成功,所以如果您要请求图像,例如,它会返回错误块中的xhr.status为200。

我在FF的成功模块中以及在“if(xhr.status == 200)”条件中包含的错误块中保留了我的“成功”功能。

答案 3 :(得分:4)

使用以下标记来支持跨浏览器

$ .support.cors = true;

答案 4 :(得分:1)

过去几天我使用JSONP Web Service遇到过与IE和AJAX类似的问题。即使是代码中最小的错误也可能导致IE中的所有内容中断。

可能最好的办法是使用Visual Web Developer Express或Visual Studio在IE中调试页面。以下是如何操作的教程:

How to debug JavaScript with Visual Web Developer Express

按照说明操作,并在AJAX请求开始时设置断点。

尝试这些事情:

  • 从错误字段中删除“XMLHttpRequest”,我以前从未使用它,我的代码工作得很好;
  • 确保您使用的是最新版本的jquery(1.3.2)?

希望你尽快开始工作!

答案 5 :(得分:1)

最后,我必须为IE浏览器创建一个单独的功能。

目标是测试某个位置的图像,使代码看起来像 -

    //get the images from the array
for(img in imgsArray){  

    if($.browser.msie){     
    /* DOM manipulation method */
    //IE has problems with ajax so try this instead
    //create a new image object with unique ID
    var testImg = $("<img/>");
    var imgID = "imgID"+img;

    //hide it..
    testImg .css({ "visibility":"hidden" });
    testImg .attr("src",imgsArray[img]);
    testImg .attr("id",imgID);

    //.. and insert it into the DOM or else test will always fail
    //because it does not exist as far as browser is concerned
    $("body").append(testImg );

    //test for image
    if(document.getElementById(imgID).width > 60){
        //do something useful
    }
}

这不是我的问题的答案,但它是一个功能性的工作。

答案 6 :(得分:1)

在.ajax配置中设置'cache:false'对我有效:)

答案 7 :(得分:0)

我建议使用Charles Proxy来查看正在发生的事情 - 即请求是否已经发出?有什么回应?

另外,我认为可能会抛出一些Exception,那么为什么不在Catch部分添加一些警报以查看会发生什么?

答案 8 :(得分:0)

如果你成功了:

Success: function (data) {
                    if (data != null) {
                        alert(data);
                       ;
                    }
                },

为此改变:

 success: function (data, textStatus, XMLHttpRequest) {
                alert(data.d);
            } 

答案 9 :(得分:0)

你可以尝试的另一件事,就像John Saunders的解决方案一样,是尝试&#34; jsonp&#34;作为内容类型,而不是json - 用于json数据类型的预期响应。我不得不尝试使用IE来让我的bug消失,这是除IE之外的其他浏览器中的普通代码。

这是我的代码:

$.ajax({
    url: request_url,
    data: { var1: 'stuff' },
    dataType: "jsonp",
    type: "get",
    async: true,
    cache: false,
    success: function(collections) {
         // handle result
    }
});

干杯。

答案 10 :(得分:0)

我遇到类似问题的问题。以上答案解决了我的许多问题。但是,还有一个我需要做的伎俩。不要使用

$.ajax({...,
success: myfunc,...});

使用

$.ajax({...,
success: myfunc(),...});

答案 11 :(得分:0)

也许编码有问题。 试试这个

$.ajax({
        type: 'GET',
        url: encodeURI(url ),
        dataType: 'text',
        success: function (data) {
                            result = JSON.parse(JSON.parse(data))
                                                }
       });

答案 12 :(得分:-1)

如果您使用输入检查,如果您有一个选择为“已选择”,如果您不这样做,即不将此参数传递给ajax函数。