我正在通过通过IE插件注入(inject)到每个页面的iframe发出ajax请求。我使用IE的cross domain request,因为IE的jQuery的ajax失败。在IE8和9上,此功能的工作时间为75%。其他25%的xdr.onload甚至不会触发。

服务器php正在执行其工作... onload触发和不触发时,日志看起来相同。同样,xdr.onerror也不会触发。

有任何想法吗?

        thisURL = "http://example.com/getmsg.php?cmd=getMessage&iid=ddeb2c1228&uurl=http%3A%2F%2Fwww.cnn.com%2F&t=" + Math.random();

        // Use Microsoft XDR
        var xdr = new XDomainRequest();
        xdr.open("GET", thisURL);
        xdr.onload = function() {
            // this is sometimes called, sometimes not in IE
            alert('INCONSISTENT ALERT');
            callback(xdr.responseText);
        };
        xdr.send();

最佳答案

我遇到了一个非常类似的问题:尽管Fiddler显示所有请求和响应 header 的发送都完全符合我的预期,但XDomainRequests仅在某些时间失败。我已经在这些XDR对象上定义了每个事件处理程序和timeout属性,并且没有一个处理程序被调用。 F12开发人员工具显示请求已中止。 GET和POST都可以中止到多个不同的域,但是第一个请求始终可以成功运行。

然后,我尝试将对xdr.send的调用设置为超时,如下所示:

setTimeout(function () {
    xdr.send();
}, 0);

而且有效。我不知道为什么,但这也许会对其他人有所帮助。

关于javascript - 来自IE的不一致的Ajax(XDR)响应,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5250256/

10-09 10:11