Uncaught SyntaxError: Failed to set the 'innerHTML' property on 'Element': The provided markup is invalid XML

Uncaught SyntaxError: Failed to set the 'innerHTML' property on 'Element': The provided markup is invalid XML

我正在尝试在我的 Rails 4 应用程序中放置一个日期时间选择器。我决定试试这个:https://github.com/Eonasdan/bootstrap-datetimepicker.

指令比较简单,但是当我加载页面时,我收到以下 JS 错误消息:

Uncaught SyntaxError: Failed to set the 'innerHTML' property on 'Element': The provided markup is   invalid XML, and therefore cannot be inserted into an XML document. 

如果我在 JQuery.extend.buildfragment 中发生这种情况的行上暂停:

tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<></>" ) + wrap[2];

我看到它正在尝试将 innerHTML 设置为:

<div class="bootstrap-datetimepicker-widget dropdown-menu"><div class="datepicker"><div class="datepicker-days"><table class="table-condensed"><thead><tr><th class="prev">&lsaquo;</th><th colspan="5" class="picker-switch"></th><th class="next">&rsaquo;</th></tr></thead><tbody></tbody></table></div><div class="datepicker-months"><table class="table-condensed"><thead><tr><th class="prev">&lsaquo;</th><th colspan="5" class="picker-switch"></th><th class="next">&rsaquo;</th></tr></thead><tbody><tr><td colspan="7"></td></tr></tbody></table></div><div class="datepicker-years"><table class="table-condensed"><thead><tr><th class="prev">&lsaquo;</th><th colspan="5" class="picker-switch"></th><th class="next">&rsaquo;</th></tr></thead><tbody><tr><td colspan="7"></td></tr></tbody></table></div></div></div>

大多数 XML 验证者抱怨 &lsaquo; 值无效。但是,我无法控制这个字符串的构造方式,因为这是 jquery 的内部结构。我知道日期时间选择器适用于大多数人,没有任何问题,所以这在我的环境中似乎有问题。

问题是页面被提供为 XHTML+XML,而不是 HTML(感谢 @Pointy 指出了这一点)。

我发现在我的application_controller.rb里面有一行如下:

  before_filter{ response.content_type = 'application/xhtml+xml' }

我实际上不知道为什么会出现这一行,但是删除这一行解决了问题并让我继续前进。

XHTML 不支持 document.write.innerHTML。由于 jQuery 使用这些方法之一插入新代码,所有 XHTML 兼容的浏览器都会出错。

带有 application/xhtml+xml 的 XHTML 不支持使用以下任何一种 jQuery 方法对源进行原始修改:.append().html().insert...() 等.

相反,查询一些 JSON 数据并将 AJAX 接收到的值插入到使用 .text() / .val() 的预定义标签中或动态创建这些节点使用 document.createElement('someTag').

https://www.w3.org/MarkUp/2004/xhtml-faq#docwrite