2

私はこれで何年も過ごしましたが、なぜそれが機能しないのか理解できません。私はajaxを使用してphpcurlに投稿を送信し、そこに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であるかどうかによって異なります。

この場合、フルテキストHTMLのように見えresponse ます。

jQuery parseHTMLメソッドはフルテキストHTMLを処理しないため、残念ながらresponse適切に解析されません。詳細については、https ://github.com/jquery/jquery/blob/master/src/core.jsを参照してください。

フルテキストHTMLの解析を検討している場合、1つのアプローチはDOMParserAPIを使用することです。"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-browserサポートを処理する)jquery.parsehtml.jsを参照します。

于 2013-01-25T00:30:45.707 に答える