Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我似乎无法让AJAX/JS重新加载PHP脚本并更新各种页面元素_Php_Ajax_Streaming_Reload - Fatal编程技术网

我似乎无法让AJAX/JS重新加载PHP脚本并更新各种页面元素

我似乎无法让AJAX/JS重新加载PHP脚本并更新各种页面元素,php,ajax,streaming,reload,Php,Ajax,Streaming,Reload,情况就是这样。我正在构建一个页面来承载Icecast服务器上承载的无线电流。我让播放器工作得很好,并拼凑了一个PHP脚本来从服务器提取和解析各种数据点。诸如当前曲目、侦听器数量等信息 问题出在这里。当页面第一次打开时,它可以正常加载,但我无法找到一种方法,让这些变量每隔5-10秒左右更新一次,并在不完全重新加载页面的情况下使用新信息更新页面(毕竟它是一个广播电台,每10秒就必须重新缓冲电台是不可行的) 这是我到目前为止,在代码中删除了各种尝试后得到的结果。有什么想法吗?我见过一到两个变量,但我这

情况就是这样。我正在构建一个页面来承载Icecast服务器上承载的无线电流。我让播放器工作得很好,并拼凑了一个PHP脚本来从服务器提取和解析各种数据点。诸如当前曲目、侦听器数量等信息

问题出在这里。当页面第一次打开时,它可以正常加载,但我无法找到一种方法,让这些变量每隔5-10秒左右更新一次,并在不完全重新加载页面的情况下使用新信息更新页面(毕竟它是一个广播电台,每10秒就必须重新缓冲电台是不可行的)

这是我到目前为止,在代码中删除了各种尝试后得到的结果。有什么想法吗?我见过一到两个变量,但我这里有十几个

            <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> 

{
$.ajax({
键入:“POST”,
url:'script.php',
数据:“getLatestInfo”,
数据类型:“json”,
cache:false,
成功:功能(dp){
$.getJSON('script.php',函数(dp){
//“data”将是从php文件返回的json
$.(“#当前歌曲”).html(“dp[9]”);
});
getlatest();
};
});
}
这是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);
}
 ?>

您需要客户端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
}

php是一种服务器端语言,因此在页面中重新运行php总是会导致整个页面刷新,但是如果使用javascript ajax调用(我建议使用jquery)对于不同的php文件,可以在服务器端执行该php文件,而不会影响页面。然后,您可以将新发现的变量从该php文件返回到javascript,并将它们插入ajax调用的回调中

看到答案了吗


如果您需要更多详细信息,请告诉我……

Javascript是执行客户端(在网站访问者机器上)的代码PHP执行服务器端。在不重新加载整个页面的情况下将内容插入页面的方法是使用Javascript将代码注入HTML。例如,现在,假设服务器上有一个名为getLatest.PHP的PHP文件,该文件带有一个名为getLatestVariables()的函数找到所有变量的最新值并返回包含它们的数组从getLatest.php,当函数返回数组时,它将返回到javascript。一旦变量数组返回到javascript,您就可以将变量插入HTML div,而不必刷新整个页面

要调用php函数,我建议使用jquery执行ajax调用 同样要插入从php返回的数据,jquery也是最好的选择

    $.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']");
});
看看jquerydocsforajax调用,如果你已经做到了这一点,你应该能够很快地解决它。 另外,别忘了在html标题中包含jquery库

<script type="text/javascript" src="http://code.jquery.com/jquery-1.6.4.min.js"></script>


让我确保我理解了这个链接。我还是javascript和PHP新手,所以如果我听起来像个傻瓜,请原谅。如果我将PHP移动到服务器上自己的PHP文档中,我可以使用ajax从脚本内部调用各个变量,例如
$radio\u info['listeners']
并将其反馈到页面中?如果是这样,我如何确保php文档具有最新的信息?它是否在每次调用变量时都重新运行脚本?我想我理解你的意思。我之所以这样编写php,是因为Icecast通过Curl请求元数据(或任何其他HTTPRequest)它将所有信息反馈到一个庞大的字符串中。我拥有的数组用于将字符串解析成有用的块。我不确定如何使用javascript收集数据,而不必在客户端脚本中解析出来……除非我在这里完全偏离了基准,这很可能是正确的。那么,数组???试试JS吧关于,在php和JavaScript之间传输数据。:-/我越来越意识到,我选择的项目要比我想象的更复杂……我需要更多的阅读……JSON……很有趣……来谷歌吧,它比旧的xml方式好,你所知道的XMLHttp现在就是JSONHttp:)好的。我想这已经足够让我沿着这条路走下去了。我会仔细阅读jquery,看看我想出了什么。如果我遇到麻烦,我会让你知道。好东西,如果你对答案满意,请随意投票或接受它:如果我返回一个数组,它会拉它的所有组件元素吗?注意,在我的原始代码中,我有所有的数据解析为变量
@radio\u info[]
下的单个数组元素,我可以写一个jquery来一次提取整个数组,还是需要单独查询每个元素?首先,你不能“写一个jquery”(我知道有误导性的名称).JQuery是一个非常流行的javascript库,它提供了非常有效的方法来执行操作,例如从php文件请求数据或修改html内容。返回到javascript的数据完全取决于php函数返回的内容。您可以为每个变量使用单独的php函数,也可以使用一个eturns一个数组。好的,我写出来了,没有抛出任何PHP或脚本错误,但是JS使用的所有变量都是空的!我确信我