2017-05-05 6 views
0

私はhtmlを取得するページと、それを解析するページを持っています。最終的な最終目標は、データをフォーマットしてローカルのdata.jsonファイルに保存します。私は、PHPよりはるかにうまくHTMLを解析するので、さまざまなスクリプトを使ってJavaScriptをミックスに追加しています。 (実際のアプリケーションでは、より複雑なHTMLの処理を行います。)ページ、Ajaxまたはカールの間でデータを同時に保存する

は、現在の反復は次のようになります。

のindex.php

public function parseHTML(string $site, string $html) 
{ 
    $data = [ 
     'html' => '<div id="get">this is text</div>', 
     'site' => $site, 
    ]; 

    $url = 'tehsaurux.net/test.php'; 

    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_HEADER, false); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_POST, 2); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 

    $synonyms = curl_exec($ch); 

    if ($synonyms === false) { 
     print_r(curl_error($ch)); 
     return false; 
    } 
    return $synonyms; 
} 

test.phpを

<?php 
if (isset($_POST['html'])) { 
    echo $_POST['html']; 
} else { 
    echo "No post data in the first test page.<br>"; 
} 
?> 


<script src="http://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 
<script> 


result = $("#get").innerHTML; 

$.post('test2.php', {data: result}, function(d) { 
    document.write("Here is the result of the second ajax request.", d); 
}); 
</script> 

test2.php

<?php 
if (isset($_POST['data'])) { 
    echo "Test1 page data is ", print_r($_POST['data']), "<br>"; 
    file_put_contents('data.txt', $data); 

} else { 
    echo "NO DATA from page 1.<br>"; 
} 

?> 

そして最後にindex.phpにプリントとして出力:

Here is the result of the second ajax request.NO DATA from page 1. 
Here is the result of the second ajax request.NO DATA from page 1. 

test.phptest2.phpへのAjaxリクエストがデータを送信しないことを、次に表示されます。さらにdocument.writeのコールはtest.phpで、その出力はそれ自身ではなくindex.phpに書き込まれます。 Ajaxの呼び出しは基本的に最初のページにスクリプトをロードしますか?requireのような記述ですか?

私は実際に取り出したhtmlを外部スクリプトに送信して解析し、きれいでクリーンなcsvデータのリストを返すことができます。

。 。 。 。 また、私はdocument.write()を使用して、返されるものであるため、各スクリプトページで目的のデータを印刷しようとしました。問題は、の結果と、の取得したhtmlが印刷されるという問題です。いいえ。

答えて

0

正直なところ、あなたのコードを解析するのに正しいアプローチを取ったとは思いません。サーバーにHTMLページを送信します.HTMLページは解釈のためにユーザーのブラウザに送り返されます。次に、選択したコンテンツの一部がサーバーに再度送信されます。 htmlはどこから来たのですか?それがあなたの100%なら、それは働くことができます。しかし、それがユーザーの場合は、すべての種類のセキュリティ問題にプロジェクトを公開します。

技術的に言えば、コードはほとんど動作しています。あなたが変える必要がある2つのもの。

を取得するので、あなたのhtmlでのバックスラッシュを削除がIDとしてinterpredtedさ:

'<div id="get">this is text</div>' 

これはPHPで'で区切られた文字列で"を持っていることは完全に罰金です。

もう1つは$("#get")です。 のようです。jQueryは、doctype、html、bodyなどで整形されたドキュメントを必要としますが、ドキュメント全体はdivで構成されています。代わりにgetElementById()を使用してください:

var result = document.getElementById("get").innerHTML; 
+0

これらは公平なポイントです。バックスラッシュは以前の実装のアーティファクトです。あなたは彼らがそこに属していないのは正しいです。 2番目のポイント - 実際に送信されるHTMLはページ全体になります。これは、doctype宣言、頭部、本文、およびすべてを含みます。 '$("#get ")'は必要な情報を得るための適切なフィルタに置き換えられます。 – Naltroc

関連する問題