一尘不染

IE的不一致Ajax(XDR)响应

ajax

我正在通过通过IE插件注入到每个页面的iframe发出ajax请求。我正在使用IE的跨域请求,因为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();

阅读 236

收藏
2020-07-26

共1个答案

一尘不染

在最后一分钟发现了问题。就我而言,即使请求没有超时,我也需要指定一个超时值。为了正确调试XDR问题,我建议使用以下代码,每个警报都告诉您代码的最新情况。正如我所说,就我而言,这是一个缺失的timeout声明。但是下面的代码应该调试任何XDR问题:

       var xdr = new XDomainRequest();
            if (xdr) {
                xdr.onerror = function () {
//                    alert('xdr onerror');
                };
                xdr.ontimeout = function () {
//                    alert('xdr ontimeout');
                };
                xdr.onprogress = function () {
//                    alert("XDR onprogress");
//                    alert("Got: " + xdr.responseText);
                };
                xdr.onload = function() {
//                    alert('onload' + xdr.responseText);
                    callback(xdr.responseText);
                };
                xdr.timeout = 5000;
                xdr.open("get", thisURL);
                xdr.send();
            } else {
//                alert('failed to create xdr');
            }
2020-07-26