【问题标题】:jquery ajax parse response textjquery ajax解析响应文本
【发布时间】:2010-11-06 05:25:06
【问题描述】:

好的,这真的让我很沮丧,因为我之前已经这样做了一百次,但这次它不起作用。所以我知道我做错了什么,我就是想不通。

我正在使用 jQuery .get 例程从另一个文件加载 html。我不想使用 .load() 因为它总是替换我正在加载内容的元素的子元素。

这是我的 .get 请求:

$(document).ready(function() {
    $.get('info.html', {}, function(html) {
        // debug code
        console.log($(html).find('ul').html());
        // end debug code
    });
});

文件“info.html”是一个标准的 xhtml 文件,具有适当的 doctype,正文中唯一的内容是我需要访问的一系列 ul。出于某种原因,find 函数给了我一个空值。

在 firebug 中,GET 请求显示正确的响应文本以及何时运行

console.log(html);

我得到了整个 info.html 作为输出,而不是当前的 console.log 行,正如我所期望的那样。

有什么想法吗?

【问题讨论】:

    标签: javascript jquery html ajax


    【解决方案1】:

    您不能拉入整个 XHTML 文档。您只能处理 html 文档的 <body> 中存在的标签。令人沮丧。从 info.html 中删除不在您的 <body> 标记内的所有内容,然后重试。

    还有其他可能解决此问题的方法 - 请查看此响应底部的“Stackoverflow 相关项目”下方。

    来自文档:(http://docs.jquery.com/Core/jQuery#htmlownerDocument)

    "HTML 字符串不能包含在 div 中无效的元素,例如 html、head、body 或 title 元素。"

    Stackoverflow 相关项目:

    【讨论】:

    • 所以我需要编写一个 php 脚本来放置在 2 个 html 文件之间并让 get 请求去那里,呵呵....这令人沮丧,我希望避免这种情况。
    • 我相信是的。老实说,您可以在 PHP 脚本中使用 phpQuery。它将允许您使用 jQuery 样式选择器轻松返回 内容。
    • 删除所有内容,但 中的内容也不起作用...我得到正确的响应,但无法解析...无论如何,谢谢!
    • 我看不出你的代码有什么问题。但是,如果您在返回的 html 中有多个 UL,那么“.find('ul').html()”只会为您提供第一个元素的 html。
    • Triffid,你确定吗?我在想它可能会从任何 UL 元素返回所有 LI。
    【解决方案2】:

    尝试在 <div> 标记中包含整个身体,例如<body><div>content</div></body>.

    【讨论】:

      【解决方案3】:

      想要做同样的事情并且知道 JQuery load(..) 可以做到这一点,我查看了代码。虽然您无法将完整的 html 响应直接转换为 JQuery 对象,但您可以将其附加到一个对象中:

      function(data, textStatus, xhr) {
          $(target).html(jQuery("<div>").append(data).find("#snippet"));
          // Create a dummy div to hold the results,
          // inject the contents of the document into it,
          // Locate the specified elements
      }
      

      进入数据的服务器的响应是这样的:

      <! doctype ... >
      <html>
        <head>
          ...
        </head>
        <body>
          <div id="snippet">
            <p>Some content here that we are interested in</p>
          </div>
        </body>
      </html>
      

      【讨论】:

      • 这是一个非常重要的答案。与这个主题的几乎所有其他线程中的答案相反,$(data)$.parseHTML(data) 都不会返回一个 jQuery 对象,这样你就可以链接到 .find() 等方法上。将它附加到一个打开的 div 标签是唯一的事情在 jQuery 2.1.0 中为我工作
      【解决方案4】:

      我知道这是一篇旧帖子,但几个小时以来我一直遇到完全相同的令人沮丧的问题并找到了解决方案。对我来说,真正起作用的是用 form 标签包裹 html 内容。

      所以有以下html源码:

      <html>
       <head>
        <body>
         <form>
          <div id="content">Some Stuff</div>
         </form>
        </body>
       </head>
      </html>
      

      使用这个 jquery sn-p 应该可以工作:

      var callback = function (data) {
         alert($("#content", $(data)).html());
      };
      $.get(url, null, callback, null);
      

      希望对你有帮助……

      【讨论】:

      • 嗯,你的语法帮助很大。 alert($("#content", $(data))) $.get(url, callback); ,但我想你是明确的原因。 PS:如您所见,您缺少一个')'。
      • 我刚刚更正了缺失的 ')' 和一些拼写检查,非常感谢@nush。
      • 您的代码显示:alert($()).html(); 应该是:alert($().html());
      【解决方案5】:

      我发现这是非常干净的解决方案:

      var elementInResponse = $("<div>").html(responseText).find(selector);
      

      【讨论】:

      • 这为我省去了头部和身体标签
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-07
      • 2019-05-15
      相关资源
      最近更新 更多