【问题标题】:jQuery append get result fails for XHTMLXHTML 的 jQuery 追加获取结果失败
【发布时间】:2013-03-06 01:18:35
【问题描述】:

当我尝试将append() $.get() 的 XHTML 结果转换为容器元素时,

$.get("my-webservice", function(data){
    $("#some-container").append(data);
  });

我收到一个错误:

TypeError: 'null' is not an object (evaluating 'e.ownerDocument')

我也试过了:

$("#some-container").append($(data));

并得到同样的错误。 load() 工作正常,所以我知道网络服务正在返回良好的数据:

$("#some-container").load("my-webservice");

在 web 服务端,如果我在返回 $.get() 之前将 XHTML 编码为字符串,则一切正常。 append() 文档说它接受字符串、DOM 元素或 jQuery 对象——我怀疑我弄错了。有什么建议吗?

网络服务只是返回一些简单的引导 XHTML:

<div class="row">
  <div class="span5">Div stuff</div>
  <div class="span4">More div stuff</div>
</div>

【问题讨论】:

  • 你能发布你的html吗?
  • console.log(data) - 你确定它是 DOM 而不是包含你需要引用的嵌套属性的对象吗?
  • @AlienWebguy 是的,试过了,在日志中看起来不错。
  • @wst,好像文档类型不匹配,你可以试试$("#some-container").append($($.parseXML(data)));吗?
  • @FrédéricHamidi 使用 parseXML 我没有收到错误,但也没有附加数据。

标签: jquery ajax web-services append


【解决方案1】:

当您使用$.get 函数而不指定dataType 时,jQuery 正在尝试对返回的文档类型做出最佳猜测。作为$.get 函数的最后一个参数,尝试添加'html' 来指定dataType。请参阅jQuery documentation 了解更多信息。

$.get("my-webservice", function(data){
    $("#some-container").append(data);
}, 'html');

【讨论】:

  • 也许这应该是一个单独的问题,但我的网络服务将自己声明为 xhtml。知道为什么它无法自动检测数据类型吗?
  • 您发布的内容可能是 HTML 文档的一部分,但也可能是 XML,那么我们如何期望 jQuery 准确地确定它是哪一个呢?此外,文档本身说,如果您不指定 dataType 属性,它会产生 Intelligent Guess。因为这是一个猜测,所以不能保证它是正确的。确保安全并指定 dataType,因为根据服务器返回的内容,它有时可能猜测正确,有时则不正确。响应服务声明自己为xhtml,jQuery只有请求URL和返回的数据来做猜测。
【解决方案2】:

尽管调试控制台提示浏览器将 Web 服务输出视为 DOM 对象,但我最终意识到内容类型设置不正确。对 web 服务的这些更改中的一个或两个都会导致 jQuery 正确猜测 dataType

  1. 将响应内容类型设置为text/html
  2. 在响应前输出&lt;!DOCTYPE html&gt;

【讨论】:

    猜你喜欢
    • 2012-01-12
    • 2014-11-27
    • 1970-01-01
    • 2016-12-24
    • 1970-01-01
    • 2012-09-28
    • 2018-04-04
    • 2015-08-25
    • 1970-01-01
    相关资源
    最近更新 更多