2

每次单击链接时,我都尝试根据其 href 加载不同的 xml 文件。我有以下内容:

JAVASCRIPT

window.onload=function() {
loadXMLDoc("papers.xml"); // loads the default xml file so that page is not empty
}

function scanForXML(){
var extLinks=document.getElementById('results_list').getElementsByTagName('a');
for (i=0; i<extLinks.length; i++) {
extLinks[i].onclick=function getName()
{
var fileName=this.getAttribute('href');
loadXMLDoc(fileName);
return false;
}
}
}

HTML

<ol id="results_list">
<li> <a class="tooltip" href="paper2.xml"> Teaching with Tablet PC's </a></li>
<li> <a href="paper3.xml" class="tooltip"> Tablet PC’s as Instructional Tools </a></li>
</ol>

onclick 事件有效,我得到了 href 值,但没有加载新的 xmlFile。任何想法为什么?

ps:没有jquery plz,不能使用它。尝试学习更好的基本 javascript

Javascript 加载代码 - 顺便说一下,它在 chrome 和 opera 中不起作用 - 但可以在 safari 代码中加载默认的 xml 文件:

function loadXMLDoc(dname)
{
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.open("GET",dname,false);
xmlhttp.send();
 xmlDoc=xmlhttp.responseXML;
}

谢谢!ķ

4

1 回答 1

0

那是因为请求是异步的:当您的 loadXMLDoc 函数返回时没有响应。

通常的解决方案是这样的:

  xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState === 4) {
        if (xmlhttp.status === 200) {
                           // use xmlhttp.responseXML;
                    }
            }
   }
  xmlhttp.open("GET",dname,false);
  xmlhttp.send();

主要区别在于您不使用 loadXMLDoc 函数的返回值,而是要求它在获取 XML 后执行某些操作。

另一种解决方案是使用jquery 的 ajax 函数强制同步请求

编辑:我将其标记为重复,因为它是一个常见问题,但我希望这个具体的答案会对你有所帮助。

于 2012-06-29T11:19:00.227 回答