jquery ajax解析响应文本

时间:2009-06-26 17:41:56

标签: javascript jquery html ajax

好的,这真的让我感到很沮丧,因为我之前已经做了一百次这次,而这次它没有用。所以我知道我做错了什么,我无法理解。

我正在使用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'是一个带有正确doctype的标准xhtml文件,而且正文中唯一的东西是我需要访问的一系列ul。出于某种原因,find函数给我一个空值。

在firebug中,GET请求显示正确的RESPONSE文本以及我运行时

console.log(html);

而不是当前的console.log行,我将整个info.html作为输出,就像我期望的那样。

有什么想法吗?

5 个答案:

答案 0 :(得分:10)

您无法提取整个XHTML文档。您只能处理html文档的<body>中存在的标记。令人沮丧。从info.html中删除不在<body>标记内的所有内容,然后再次尝试。

还有其他可能解决此问题的方法 - 请在此回复的基础上查看“Stackoverflow相关项目”。

  

来自Doc:(http://docs.jquery.com/Core/jQuery#htmlownerDocument

     

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

Stackoverflow相关项目:

答案 1 :(得分:8)

我知道这是一个很老的帖子,但是我已经有了几个小时的确定同样令人沮丧的问题并找到了解决方案。对我来说,实际工作的是将html内容包装为表单标记。

所以拥有以下html源代码:

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

这个jquery片段应该可以工作:

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

希望这会有所帮助......

答案 2 :(得分:6)

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

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

答案 3 :(得分:3)

想要做同样的事情并且知道JQuery加载(..)这样做,我看了一下代码。虽然您无法将完整的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>

答案 4 :(得分:0)

尝试在<div>标记中包含全身,例如<body><div>content</div></body>