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