使用jQuery .load()函数时出现“XML Parsing Error: junk after document element”错误
嘿,我懂你的困惑——明明内容已经成功显示在页面上了,控制台却偏要弹出那个烦人的XML Parsing Error: junk after document element错误,对吧?别着急,咱们来拆解一下这个问题。
问题原因
这个错误的根源在于服务器返回的内容类型(Content-Type)设置不对。你的exhtml.php里是纯HTML片段,但如果服务器给这个PHP文件返回的Content-Type是text/xml或者application/xml,浏览器就会用XML的规则去解析它。而XML要求整个文档只能有一个根元素,你的exhtml.php里有两个根级元素(<h2>和<div>),这就违反了XML的规则,所以浏览器会报错说“文档元素后有多余内容”。
至于为什么页面内容还能正常显示?那是因为浏览器的容错机制在起作用——就算XML解析失败了,它还是会尝试把返回的内容当成HTML来渲染,所以你能看到内容,但控制台的错误还是会存在。
解决方案
这里有两个简单的办法可以解决这个问题:
方案1:在PHP文件中强制设置正确的Content-Type
在exhtml.php的最开头添加一段PHP代码,告诉服务器返回HTML类型的内容:
<?php header('Content-Type: text/html; charset=UTF-8'); ?> <h2>This is a header !</h2> <div class="hh"> <h2>This is a header !</h2> </div>
这样服务器就会明确告诉浏览器“这是HTML内容”,浏览器就会用HTML的规则去解析,不会再触发XML解析错误。
方案2:在jQuery.load()中指定数据类型为HTML
如果你不想修改PHP文件,也可以直接在jQuery的调用里明确指定返回内容按HTML处理:
// 完整写法,可添加回调逻辑 $('#newhd').load('exhtml.php', function(response, status, xhr) { // 这里可以添加加载完成后的逻辑,比如错误处理 }, 'html'); // 简洁写法 $('#newhd').load('exhtml.php', '', 'html');
通过指定'html'作为数据类型,jQuery会强制把返回的内容当成HTML来解析,忽略服务器返回的Content-Type头,这样也能避免XML解析错误。
内容的提问来源于stack exchange,提问作者morteza jamali




