1

URLのリストからメタデータを取得するPHPスクリプト(以下に貼り付け)があります。問題は、読み込みに時間がかかる可能性があり、ユーザーが完全に終了したことを知らないことです(読み込みアイコンを監視している場合を除きます)。彼らのブラウザタブ)

私は長い間オンラインで探していましたが、これに対する解決策を見つけることができません。Ajaxを使用できると読みましたが、このスクリプトでどのように正確に使用できますか?

助けてくれてありがとう!

<script type="text/javascript">
function showContent(vThis)
{
    // http://www.javascriptjunkie.com
    // alert(vSibling.className + " " + vDef_Key);
    vParent = vThis.parentNode;
    vSibling = vParent.nextSibling;
    while (vSibling.nodeType==3) { // Fix for Mozilla/FireFox Empty Space becomes a TextNode or         Something
        vSibling = vSibling.nextSibling;
    };
    if(vSibling.style.display == "none")
    {
        vThis.src="collapse.gif";
        vThis.alt = "Hide Div";
        vSibling.style.display = "block";
    } else {
        vSibling.style.display = "none";
        vThis.src="expand.gif";
        vThis.alt = "Show Div";
    }
    return;
}

</script>



<form method="POST" action=<?php echo "'".$_SERVER['PHP_SELF']."'";?> >
<textarea name="siteurl" rows="10" cols="50">
<?php //Check if the form has already been submitted and if this is the case, display the   submitted content. If not, display 'http://'.
echo (isset($_POST['siteurl']))?htmlspecialchars($_POST['siteurl']):"http://";?>
</textarea><br>
<input type="submit" value="Submit">
</form>
</div>

<div id="nofloat"></div>
<div style="margin-top:5px;">
<h4><img src="expand.gif" alt="Show Div" border="0" style="margin-right:6px; margin-  top:3px; margin-bottom:-3px; cursor:pointer;" onclick="showContent(this);" />Show me the    script working!</h4>
<div style="margin-top:5px; display:none;">
<table class="metadata" id="metatable_1">
<?php
ini_set('display_errors', 0);
ini_set( 'default_charset', 'UTF-8' );
error_reporting(E_ALL);
//ini_set( "display_errors", 0);
function parseUrl($url){
    //Trim whitespace of the url to ensure proper checking.
    $url = trim($url);
    //Check if a protocol is specified at the beginning of the url. If it's not,     prepend 'http://'.
    if (!preg_match("~^(?:f|ht)tps?://~i", $url)) {
            $url = "http://" . $url;
    }
    //Check if '/' is present at the end of the url. If not, append '/'.
    if (substr($url, -1)!=="/"){
            $url .= "/";
    }
    //Return the processed url.
    return $url;
}
//If the form was submitted
if(isset($_POST['siteurl'])){
    //Put every new line as a new entry in the array
    $urls = explode("\n",trim($_POST["siteurl"]));
    //Iterate through urls
    foreach ($urls as $url) {
            //Parse the url to add 'http://' at the beginning or '/' at the end if not   already there, to avoid errors with the get_meta_tags function
            $url = parseUrl($url);
            //Get the meta data for each url
            $tags = get_meta_tags($url);
            //Check to see if the description tag was present and adjust output    accordingly
            $tags = NULL;
$tags = get_meta_tags($url);
if($tags)
echo "<tr><td>$url</td><td>" .$tags['description']. "</td></tr>";
else 
echo "<tr><td>$url</td><td>No Meta Description</td></tr>";
    }
}
?>
</table>
</div>
<script type="text/javascript">
        var exportTable1=new ExportHTMLTable('metatable_1');
    </script>
<div>
        <input type="button" onclick="exportTable1.exportToCSV()"   value="Export to CSV"/>
        <input type="button" onclick="exportTable1.exportToXML()"   value="Export to XML"/>
    </div>
</div>

4

3 に答える 3

5

アイディア:

別のファイルにphpコードを追加する

読み込み中の画像を表示する

そして、この関数を呼び出します

function Load()
{
    var xmlhttp;
    var url;

    if (window.XMLHttpRequest)
    {// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    }
    else
    {// code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }

    xmlhttp.onreadystatechange=function()
    {
        if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {           
            //(optional)do something with response: xmlhttp.responseText
            document.getElementById("area").innerHTML=xmlhttp.responseText;
            document.getElementById("loadingimage").src = "afterloading.gif";
        }
    }

    xmlhttp.open("GET","phpfile.php",true);
    xmlhttp.send();
}

この関数はjavascriptの場所に移動し、ドキュメントの読み込みが完了した後にjqueryで呼び出すか、

<body onload="Load()">

体の中には次のようなものがあります

<img id="loadingimage" src="loading.gif"/>
<div id="area">...</div>
于 2012-04-25T09:20:08.003 に答える
1

作業を行う部分()を抽出<?php ini_set [...] ?>し、別のファイル(GetMetaData.phpなど)に保存して、JSONまたはXMLを返すようにします。

次に、送信イベントをキャプチャして、ユーザーがGetMetaDataスクリプトに入力したURLを非同期で送信することができます。その呼び出しが戻ったら、スクリプトが返したデータを使用してテーブルにデータを入力できます。

于 2012-04-25T09:14:40.283 に答える
0

コメントで述べたように、ここには基本的に 2 つのオプションがあります。1 つ目は JavaScript の動作に依存し、2 つ目は出力バッファリングに依存して、何が起こっているかについて一種の「実行中のコメント」を提供し、進行状況レポートを出力できる適切なポイントがスクリプトに存在するかどうかに依存します。

AJAX のアプローチでは、手間のかかる作業を行うコードを取得し、それを AJAX で使用できる独自の PHP スクリプトに配置するだけです。メイン ページは、単純な読み込み画面と、AJAX を介して作業を行うスクリプトを呼び出す JavaScript です。AJAX スクリプトが完了すると、コールバック関数をトリガーして、返された結果を HTML としてフォーマットし、読み込み画面の代わりに表示できます。

もう 1 つのアプローチでは、スクリプトのメイン ループで出力バッファリングとフラッシュを使用します。

while ($task_not_complete)
{
    do_some_more_work ();
    echo ('<p>Something indicating how much progress has been made goes here</p>');
    ob_flush ();
    flush ();
}

このアプローチは JavaScript を必要としませんが、独自の欠点があります。まず、Web サーバーまたはクライアントとサーバーの間に存在する可能性のあるプロキシでのバッファリングの設定方法によっては、スクリプトが完了するまでまったく機能せず、出力がまったく返されない場合があります。次に、サーバー上のスクリプトが終了し、ブラウザーが終了</html>タグを受け取るまで、DOM ツリーは有効になりません。これは、実行中のプロセスが完了するまで、ページが使用する JavaScript が確実に DOM 操作を実行できないことを意味します。

于 2012-04-25T09:32:39.977 に答える