2012-01-22 64 views
2

看起來像一個常見的錯誤,但我發現搜索的解決方案都沒有證明成功(用&代替&就是其中之一)。我有一個簡單的Javascript(AJAX),其中包括一對雙if語句。該腳本在Chrome和Firefox中均可正常工作,但在IE9中沒有報告與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

的Jukka K. Korpela說明一個IE9怪異模式行爲評論到this answer

這是IE 9(在Quirks模式)的錯誤,因爲由spefications,&#x2022在此處是有效。但是,一直以來都是很好的做法,推薦使用分號結束所有實體引用(如&nbsp;)和字符引用(如&#233;),部分原因是忽略它引發了各種瀏覽器錯誤。

我不同意規範說什麼,但IE9的怪癖模式可能是罪魁禍首。

4

可以CDATA部分中附上腳本:

<script type="text/javascript"> 
//<![CDATA[ 
document.write("&&"); 
//]]> 
</script> 
相關問題