2011-02-02 72 views
2

我有一些jQuery代碼,沒有它在文檔中通過驗證很好,但它在它導致錯誤。有問題的代碼是在這裏:W3 xHTML驗證jQuery代碼錯誤!

$.ajax({ 
     type: "GET", 
     url: "data.xml", 
     dataType: "xml", 
     success: function(xml) { 

      //Update error info 
      errors = $(xml).find("Errors").find("*").filter(function() 
      { 
       return $(this).children().length === 0; 
      }); 

      if (errors.length == 0) 
      { 
       statuscontent = "<img src='/web/resources/graphics/accept.png' alt='' /> System OK"; 
      } 
      else 
      { 
       statuscontent = "<img src='/web/resources/graphics/exclamation.png' alt='' /> "+errors.length+" System error"+(errors.length>1?"s":""); 
      } 

      $("#top-bar-systemstatus a").html(statuscontent); 

      //Update timestamp 
      $("#top-bar-timestamp").html($(xml).find("Timestamp").text()); 

      //Update storename 
      $("#top-bar-storename").html("Store: "+$(xml).find("StoreName").text()); 
     } 
    }); 

有哪個一切工作正常,並不會造成錯誤頁面上的其他jQuery的代碼加載,所以我不是很明白什麼是錯。該頁面不是「活的」,因此不幸的是不能提供鏈接。

它列出的錯誤是

文件類型不允許元素 「IMG」 這裏

和代碼它指向的線是在這裏:

statuscontent = "<img src='/web/resources/graphics/accept.png' alt='' /> System OK"; 

它下一個作業也有問題statuscontent

+3

讓你的JavaScript代碼在外部。 – Gumbo 2011-02-02 15:36:02

+0

@Gumbo同意,除非您的託管人以請求限制懲罰您。 – 2011-02-02 15:36:48

回答

9

這是因爲您使用的是XHTML。這是無效的,因爲驗證器的行爲就好像腳本標記之間的代碼是XML(XHTML是XML的一個子集)。這是無效的XHTML,因爲img-標記不屬於script -tags。

要使其生效,請使用CDATA來轉義腳本中的任何XML。

<script type="text/javascript"> 
// <![CDATA[ 

... your code 
// ]]> 
</script> 

在HTML 5,這不是一個問題。如果你創建一個新網站,我建議使用HTML 5而不是XHTML。只有在修改現有網站時才使用XHTML。

1

請參閱Script and Style Elements的HTML5差異。

接下來請參閱the comparable section in the XHTML Media Types document,因爲您幾乎可以肯定地將您的XHTML用作HTML兼容的IE瀏覽器。 (那麼你可能會做我在99年做過的事情,那就是把你舉起手來,尖叫着「如果我不得不假裝它是HTML ?!,那麼使用XHTML有什麼意義?」並且運行回到HTML 4.01(或可能到HTML 5))

+0

這對W3錯誤進行了排序,謝謝,由於某種原因在IE中,雖然我得到腳本錯誤。在W3驗證或Firebug控制檯中沒有錯誤。 – Chris 2011-02-02 15:22:55