2

href に基づいて、リンクがクリックされるたびに別の xml ファイルを読み込もうとしています。私は頭の中で以下を持っています:

ジャバスクリプト

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 では機能しませんが、デフォルトの 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;
}

ありがとう!K

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 に答える