2

我在这方面花了很长时间,不明白为什么它不起作用。我正在使用 ajax 向 php curl 发送一个帖子,其中包含一个 url,然后返回到 ajax。当我发送警报时,该页面的所有 html 都会显示在警报中。现在我想使用 jquery 来查找每个元素,即 body、h1、title 并输出内容,但是当我这样做时,它不适用于 body 或 title。这是为什么?

这是我的jQuery

        $.ajax({
      type: "POST",
      url: "senddom.php",
      data: {"dataString" : dataString },
      success: function(response) {   
  $('body').append("<p> contents of title:" + $(this).find('title').html() + "</p>");       
  $('body').append("<p> contents of all: " + $(this).find('body').html() + "</p>");

 $(response).find('h1').each(function() {
  $('body').append("<p> contents of H1: " + $(this).text() + "</p>");
});

这是我的 php

<?php 

    $site= $_POST['dataString'];             // get data
function curl_get($site){
    $useragent = 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Media Center PC 4.0)';
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$site);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,5);
    curl_setopt($ch, CURLOPT_USERAGENT, $useragent);

    $data=curl_exec($ch);
    curl_close($ch);
    return $data;


}

function getdom($site){
    $html = curl_get($site);
    $xml = new DOMDocument();
    @$xml->loadHTML($html);
    echo($html);


}

echo getdom($site);

?>
4

1 回答 1

5

在你的成功块内:$(this)->$(response)

跟进:全文 HTML 与片段

虽然这似乎可以解决眼前的问题,但这取决于您的响应是否是完整的 HTML 正文。

在这种情况下,看起来好像response 全文 HTML。

jQuery parseHTML 方法不处理全文 HTML,很遗憾response无法正确解析。更多信息请参见:https ://github.com/jquery/jquery/blob/master/src/core.js

在您希望解析全文 HTML 的情况下,一种方法是使用DOMParser API。值得注意的是,"text/html"目前缺乏对解析的支持;仅在 Firefox 中可用。另一种方法是document.implementation支持除 IE<9 之外的所有版本。

也就是说,在您想要使用的情况下的一个示例DOMParser-

parser = new DOMParser();
doc = parser.parseFromString(response, "text/html");
$response = $(doc)
$response.find('title').text()

您要使用的示例documentation.implementation-

var doc = document.implementation.createHTMLDocument("");
var doc_el = doc.documentElement;
doc_el.innerHTML = response;
$response = $(doc_el); // 
$response.find('title').text()

有关更多信息,我将参考我在 github 上找到的一个不错的 jQuery 插件(处理 x 浏览器支持):jquery.parsehtml.js

于 2013-01-25T00:30:45.707 回答