2011-02-02 73 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