当前位置: 首页 > 面试题库 >

XDomainRequest中止IE 9上的POST

姬烨磊
2023-03-14
问题内容

我正在进行跨域Ajax调用。

我的代码:

if (window.XDomainRequest) // Check whether the browser supports XDR.
{
    xdr = new XDomainRequest(); // Create a new XDR object.
    if (xdr) {
        xdr.timeout = 3000;//Set the timeout time to  3 second.
        xdr.onload = function () {
            alert("Success");
        };
        xdr.onerror = function () {
            alert("Error");
        };
        xdr.ontimeout = function () {
            alert("Error");
        };
        xdr.open("post", urlSearch);
        xdr.send();
    }
}
else {
    $.ajax({
        url: urlSearch,
        type: 'POST',
        dataType: 'json',
        timeout: 3000,
        success: function (data) {
            alert("Success");
        },
        error: function () {
            alert("Error");
        }
    });
}

上面的代码在所有浏览器中都可以正常工作,但是在IE中有时会显示类似(异常终止)的错误。

为了克服此错误,我在Google中进行了搜索,但未找到任何好的解决方案。

您可以在显示(终止)的地方看到错误消息。
http://postimg.org/image/k01u6t9v5/

当我单独呼叫特定的URL时,它没有显示任何(终止)消息(“显示成功”警报)。但是,当我进行多次调用(如图中所示)时,它会显示这种类型的错误。

如何克服这个问题?

请帮忙

提前致谢


问题答案:

我不确定这是同一个问题,但就我而言,所有这些都需要设置:onerror; 进行中 超时 和加载。这里是一些讨论该问题的参考:

  • http://social.msdn.microsoft.com/Forums/ie/zh-CN/30ef3add-767c-4436-b8a9-f1ca19b4812e/ie9-rtm-xdomainrequest-issued-requests-may-abort-if-all-event-未指定处理程序
  • http://cypressnorth.com/programming/internet-explorer-aborting-ajax-requests-fixed/
  • http://rudovsky.blogspot.com/2012/09/microsoft-shit-xdomainrequest.html
  • https://github.com/faye/faye/pull/98

还有很多其他的。他们的建议解决方案分散,有时矛盾。例如,建议将xdr.send调用包装在setTimeout中。

我看到的行为通过为每个事件处理函数添加非空白主体而消失了。我不确定是否全部必要。该setTimeout的包装肯定 不是 必要的。

一条可能不相关的信息:在我的情况下,我决定将每个处理程序绑定到“
this”对象。我还添加了函数实现,以防止编译器将它们全部分配给同一空函数。我的代码使用的是GET,而不是POST。YMMV。

您的代码使一个处理程序保持不变:

if (window.XDomainRequest) // Check whether the browser supports XDR.
{
    xdr = new XDomainRequest(); // Create a new XDR object.
    if (xdr) {
        xdr.timeout = 3000;//Set the timeout time to  3 second.
        xdr.onload = function () {
            alert("Success");
        };
        xdr.onerror = function () {
            alert("Error");
        };
        xdr.ontimeout = function () {
            alert("Error");
        };
        // this also needs to be set
        xdr.onprogress = function() {
            window.console.log('progress');
        };
        xdr.open("post", urlSearch);
        xdr.send();
    }
}
else {
    $.ajax({
        url: urlSearch,
        type: 'POST',
        dataType: 'json',
        timeout: 3000,
        success: function (data) {
            alert("Success");
        },
        error: function () {
            alert("Error");
        }
    });
}


 类似资料:
  • 问题内容: 看来这是一个众所周知的问题,但是我在Google上找到的所有解决方案都不适用于我新下载的IE9。 启用and 标签上的属性的最喜欢的方式是哪种? 可选:我为此花了很多时间,而且还没有去寻找房产。您对此还有意见吗?显然,我可以检查PHP中的值,但是对于帮助用户使用此属性非常方便。 问题答案: HTML5占位符jQuery插件 -通过的Mathias Bynens上协作者HTML5样板和j

  • 问题内容: 我已经建立了一个AJAX聊天室;并且它可以在chrome和FF中使用,但当然不能在IE中使用。这是我的代码: 结果永远不会显示。我有一个名为AjaxDiv的div,如果有帮助的话。我究竟做错了什么?这是一个错误吗? 问题答案: 每次发出请求时,都可能要取出缓存的副本。 在服务器上设置正确的缓存头 或将查询字符串附加到get请求中,如下所示

  • 问题内容: 看来这是一个众所周知的问题,但是我在Google上找到的所有解决方案都不适用于我新下载的IE9。 启用and 标签上的属性的最喜欢的方式是哪种? 可选:我为此花了很多时间,而且还没有去寻找房产。您对此还有意见吗?显然,我可以检查PHP中的值,但是对于帮助用户使用此属性非常方便。 问题答案: HTML5占位符jQuery插件 -通过的Mathias Bynens和jsPerf https

  • 问题内容: (我已经看过许多关于SO的其他类似文章,但不幸的是无法解决此问题,所以这里…) 我正在使用Selenium WebDriver(C#实现,版本2.15)来驱动一个相当简单的网页。该页面包含一个表单,其中包含两个用于输入用户名和密码的<输入>,以及一个用于提交该表单的<输入>。我可以成功输入用户名和密码的值,但是提交按钮上的Click()调用似乎无效。 对于其他建议,我尝试了以下技巧,但

  • 问题内容: 有没有一种简单的方法可以让css3 在IE9中工作?至少一个文本阴影会很棒。我想理想情况下也支持IE8。我希望有一个简单的jquery插件或.htc文件,它仅查看元素的text- shadow css属性并为IE9实现它。 问题答案: 是的,但不是您想像的那样。根据caniuse(一种非常好的资源)的说法,没有支持,也没有polyfill可用于为IE9 添加支持。但是, IE具有自己的

  • 问题内容: 我正在执行从Date到字符串的转换,然后再转换为在sessionStorage中使用。所以我首先这样做: 然后我这样做: 问题在于, IE9 +* 中的函数将返回,但在IE8中,它将返回缺少结尾的小数部分。事实是,在IE8中,随后的重新转换均无法转换为日期(结果为) * 知道为什么会发生这种情况以及如何使此代码适用于IE8 +吗? 更新: 我尝试在调试中替换字符串,结果发现这两个字符串