Javascript“无效的调用对象”错误与xml

时间:2013-11-18 23:08:58

标签: javascript xml internet-explorer getattribute

我想在用户插入文本时显示列表(如自动完成)。

我使用列表加载xml,当用户使用文本时,javascript函数循环到xml中以查找匹配项。

一切正常,除非在Internet Explorer上,SOMETIMES显示此错误:“SCRIPT65535:无效的调用对象”。

  • 我第一次调用js函数循环进入xml总是有效但是如果我等了5秒才再调用它,它会显示错误。
  • 如果我等待不到1秒,它将不会显示错误。

可能是因为在循环中我调用了getAttribute()方法...当我删除它时没有错误。

感谢您的帮助!

以下是代码:

Ajax加载:

var ajax = {};

ajax.getXMLHttpRequest = function(){
    var xhr = null; 
    if(window.XMLHttpRequest || window.ActiveXObject){
        if(window.ActiveXObject){
            try{
                xhr = new ActiveXObject("Msxml2.XMLHTTP");
            }
            catch(e){
                xhr = new ActiveXObject("Microsoft.XMLHTTP");
            }
        }
        else xhr = new XMLHttpRequest();
    }
    else return null;
    return xhr;
};

ajax.loadFile = function(callback){
    var xhr = ajax.getXMLHttpRequest();
    xhr.onreadystatechange = function(){
        if(xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)){
            callback(xhr.responseXML);
            xhr = null;
        }
    };
    xhr.open("GET", 'file.xml', true);
    xhr.setRequestHeader("Content-Type", "text/xml");
    xhr.send(null);
};

ajax.loadFile(callback);

回调功能:

var xml_nodes = '';

function callback(response){
    xml_nodes = response.getElementsByTagName('node');
}

然后鼠标点击或其他任何触发此功能:

function buttonClick(){
    for(var i=0; i<xml_nodes.length; i++){
        var attr = xml_nodes[i].getAttribute('attr');
    }
}

1 个答案:

答案 0 :(得分:1)

这是一个仅在Internet Explorer中出现的缓存问题。您的callback(response)函数会将节点元素分配给xml_nodes变量。这些节点是response的一部分,XMLHttpRequestbuttonClick的一部分,因为你没有指向它而被处置掉。

xml_nodes函数将迭代连接到已处理的XMLHttpRequest的{{1}}。这些因为没有指针而被处理掉,因此是无效的对象。

一个简单的解决方法是在数组中缓存您的请求。但是,这将导致大量不必要的内存使用。您应该从xml响应创建对象并存储它们。这些新对象没有指向responseXML的任何指针,因此是有效的对象。

希望这有所帮助,遇到同样的问题:)