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

Javascript "Invalid calling object" error with xml

本文关键字:xml 对象 错误 无效 Javascript 调用      更新时间:2023-09-26

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

我加载一个带有列表的xml,当用户键入文本时,一个javascript函数循环到xml中查找匹配项。

一切正常,除了在Internet Explorer上,它有时会显示此错误:"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');
    }
}

这是一个仅在Internet Explorer中发生的缓存问题。callback(response)函数将节点元素分配给xml_nodes变量。这些节点是response的一部分,也是XMLHttpRequest的一部分

buttonClick函数将迭代连接到已处理的XMLHttpRequest的xml_nodes。这些被丢弃是因为您没有指向它的指针,因此是无效对象。

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

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