2012-01-22 11 views
2

一般的なエラーのようですが、私が検索した解決策はどれも成功していません(&を&に置き換える)私は単純なJavascript(AJAX)を持っていますが、これには二重のif文がいくつか含まれています。このスクリプトはChromeとFirefoxの両方でうまく動作しますが、Internet Explorer 9ではNetbeansと同じ行にエラーが報告されません(エンティティ名は '&'(...)の直後にある必要があります)。エンティティ名はすぐに '&'(...)の後に続ける必要があります

ここに誰かがエラーを見つけたり、私が見た場所に手がかりを与えたりすることを願っています。

function getNames(str) { 
    var xmlhttp; 
    if (str.length == 0) { 
     document.getElementById("txtHint").innerHTML = ""; 
     return; 
    } 
    if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari 
     xmlhttp = new XMLHttpRequest(); 
    } else { // code for IE6, IE5 
     xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    xmlhttp.onreadystatechange = function() { 
     // The line below is what produces the error. 
     if (xmlhttp.status == 200 && xmlhttp.readyState == 4) { 
      var arr = xmlhttp.responseText.split(","); 
      var ul = document.getElementById("names"); 
      var li = document.createElement("li"); 
      if (ul.hasChildNodes()) { 
       while (ul.childNodes.length >= 1) { 
        ul.removeChild(ul.firstChild); 
       } 
      } 

      for (var i = 0; i < arr.length; i++) { 
       if (arr[i] != ":@") { 
        var li = document.createElement("li"); 
        li.innerHTML = newListItem = arr[i]; 
        ul.insertBefore(li, ul.getElementsByTagName("li")[0]); 
       } 
      } 

     } 
    } 
    xmlhttp.open("GET", "./ext/get_names.php?q=" + str, true); 
    xmlhttp.send(); 
} 
+0

私は、あなたが '場合(xmlhttp.statusの== 200 && xmlhttp.readyState == 4)'と '場合(xmlhttp.statusの== 200 & & xmlhttp.readyState == 4)' –

+0

あなたがたを交換する必要があると思います私はそれを試みました。それはすべてのブラウザでスクリプトを完全に破った。 –

+0

それを入れ子にしてみましょう。 'if(xmlhttp.status == 200){if(xmlhttp.readyState == 4){' –

答えて

1

、きれいな解決策は、通常、外部ファイルにあなたのjavascriptのコードを移動しています。

javascriptを異なる方法で解釈するブラウザで最も奇妙な問題を回避するだけでなく、キャッシュ可能にすることもできます。

+0

IE9は今、

xmlhttp.status == 200
が "不特定のエラー"を作り出していると報告しています。私はPaul Tomblinが提案したようにそれらを入れ子にしてみました。 –

+0

スクリプトを外部ファイルに移動した場合は、何かをエスケープまたは再フォーマットする必要はありません。実際にはHTMLページに含まれることを心配することなくコードを書くだけです。たとえば、http://www.jibbering.com/faq/faq_notes/script_tags.html#hsExCを参照してください。 –

+0

真。私は元のスクリプトに戻りました。しかし、それはまだIEで動作しませんが、私はそれのために別の質問を作成する必要がありますね。 ありがとうございます。 –

0

ユッカK. KorpelaはIE9はspeficationsにより、&#x2022がここに有効であるので、これは、(癖モード)IE 9のバグであるthis answer

にコメントモードでの動作を癖説明しました。しかし、すべての実体参照(&nbsp;など)と文字参照(&#233;など)をセミコロンで終了することが推奨されていますが、これを省略するとさまざまなブラウザのバグが発生する可能性があります。

私は仕様書には同意しませんが、IE9準拠モードが原因である可能性があります。あなたはCDATAセクション内にスクリプトを囲むことができ

4

:あなたは特別な理由がない限り

<script type="text/javascript"> 
//<![CDATA[ 
document.write("&&"); 
//]]> 
</script> 
関連する問題