2

これが状況です。Icecastサーバーでホストされているラジオストリームをホストするページを作成しています。私はプレーヤーをうまく機能させ、PHPスクリプトを組み合わせて、サーバーからさまざまなデータポイントを抽出して解析しました。現在のトラック、リスナーの数などの情報。

ここに問題があります。ページを最初に開いたときは正常に読み込まれますが、これらの変数を5〜10秒ごとに更新し、ページを完全に再読み込みせずに新しい情報でページを更新する方法がわかりません(これは結局のところ、ラジオ局であり、10秒ごとに局を再バッファリングする必要があるのは現実的ではありません。

さまざまな試みがコードから削除された後、これまでのところ、これが私が持っているものです。何か案は?私はそれが1つまたは2つの変数に対して行われるのを見てきましたが、ここにはほぼ1ダースあります...

            <div id="current_song"></div>

            <script language="javascript" src="http://code.jquery.com/jquery-1.8.2.min.js"></script> 
            <script language="javascript"> 
            {
              $.ajax({
                type: 'POST',
                url: 'script.php',
                data: 'getLatestInfo',
                dataType: 'json',
                cache: false,
              success : function(dp){
                $.getJSON('script.php', function(dp) {
            //'data' will be the json that is returned from the php file
                $.("#current_song").html("dp[9]");
            });
               getlatest();
              };
              });
            }
            </script> 

これがPHPパーサーです

<?php 
Function getLatestInfo() {

$SERVER = 'http://chillstep.info:1984'; 
$STATS_FILE = '/status.xsl?mount=/test.mp3'; 
$LASTFM_API= '27c480add2ca34385099693a96586bd2'; 

//create a new curl resource 
$ch = curl_init(); 

//set url 
curl_setopt($ch,CURLOPT_URL,$SERVER.$STATS_FILE); 

//return as a string 
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); 

//$output = our stauts.xsl file 
$output = curl_exec($ch); 

//close curl resource to free up system resources 
curl_close($ch); 

//loop through $ouput and sort into our different arrays 
$dp = array(); 

$search_for = "<td\s[^>]*class=\"streamdata\">(.*)<\/td>"; 
$search_td = array('<td class="streamdata">','</td>'); 

if(preg_match_all("/$search_for/siU",$output,$matches)) { 
   foreach($matches[0] as $match) { 
      $to_push = str_replace($search_td,'',$match); 
      $to_push = trim($to_push); 
      array_push($dp,$to_push); 
   } 
} 
$x = explode(" - ",$dp[9]); 

echo json_encode($dp);
}
 ?>

まだきれいに見えないことは知っていますが、それがCSSの目的です。

何か案は?基本的に、オーディオタグに触れることなく、PHPスクリプトを再実行し、変数を更新し、テキスト出力を再構築する必要があります。

4

4 に答える 4

1

Javascript はクライアント側 (Web サイト訪問者のマシン) で実行されるコードであり、PHP はサーバー側で実行されます。ページ全体をリロードせずにコンテンツをページに挿入する方法は、Javascript を使用してコードを HTML に挿入することです。たとえば、サーバー上に getLatest.php という PHP ファイルがあり、 getLatestVariables() という関数があり、すべての変数の最新の値を見つけて、それらを含む配列を返すとします。できることは、javascript を使用して getLatest.php から getLatestVariables() を呼び出し、関数が配列を返すときにそれを javascript に返すことです。変数の配列が JavaScript に返されたら、ページ全体を更新することなく、変数を HTML div に挿入できます。

php関数を呼び出すには、jqueryを使用してajax呼び出しを実行し、phpから返されたデータを挿入することをお勧めします。jqueryも最善の策です。

于 2012-10-03T11:03:21.837 に答える
0
    $.getJSON('phpFileThatReturnsJSON.php', function(data) {
//'data' will be the json that is returned from the php file
$.("#idOfDivToInsertData").html("an item from the json array ie data['song']");
});

JQueryのドキュメントでajax呼び出しを確認してください。ここまで進んだら、すぐに解決できるはずです。また、htmlヘッダーにjqueryライブラリを含めることを忘れないでください...

<script type="text/javascript" src="http://code.jquery.com/jquery-1.6.4.min.js"></script>
于 2012-10-04T15:19:15.283 に答える
0

これにはクライアント側の JavaScript が必要です。基本的な ajax の本を手に入れてください。5 秒ごとに更新されたデータのスクリプトを要求し、ページ上で更新することができます。これは複雑で、JavaScript の知識が必要です。スクリプトも新しくする必要があります。または、これを編集してリクエストのタイプを追跡し、それに応じてデータを返す必要があります。

var url="http://script-address"
var req = new XMLHttpRequest(); // Begin a new request
req.open("GET", url); // An HTTP GET request for the url
req.send(null);

レスポンスの確認方法はこちら

req.onreadystatechange = function() {
if (req.readyState == 4 && req.status == 200) {
//we got a complete valid HTTP response
var response = req.responseText; 
//code to handle response
}
于 2012-10-03T10:29:05.060 に答える
0

php はサーバーサイド言語であるため、ページ内で php を再実行すると常にページ全体が更新されますが、別の php ファイルに対して javascript ajax 呼び出し (jquery の使用をお勧めします) を使用すると、その php ファイルを実行できます。ページに影響を与えずにサーバー側。次に、この php ファイルから新しく見つかった変数を JavaScript に返し、それらを ajax 呼び出しのコールバックに挿入できます。

この質問への回答を参照してください

詳細が必要な場合はお知らせください...

于 2012-10-03T10:35:16.733 に答える