当用户输入文本(如自动完成)时,我想显示一个列表。
我用列表加载了一个 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');
}
}