我在收音机网站上使用了javascript歌曲倒计时。
每隔10秒钟,倒计时会滞后(跳过1秒),因为有一个ajax调用来检查是否有新歌:
function getcursong(){
var result = null;
var scriptUrl = "get_current_song.php";
$.ajax({
url: scriptUrl,
type: 'get',
dataType: 'html',
async: false,
success: function(data) {
result = data;
}
});
return result;
}
在控制台中查看,我发现GET
通话大约需要2秒钟。
get_current_song.php
使用curl
从icecast服务器获取当前歌曲。
我有什么办法可以阻止因为那些ajax调用而导致倒计时延迟吗?
以下是get_current_song.php
。
<?php
require('config.php');
$current_song = getStreamInfo();
function url_get_contents($Url) {
if (!function_exists('curl_init')){
die('CURL is not installed!');
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $Url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch,CURLOPT_TIMEOUT,2);
$output = curl_exec($ch);
curl_close($ch);
return $output;
}
function getStreamInfo(){
$str = url_get_contents(SERVER.'/status.xsl?mount='.MOUNT);
if(preg_match_all('/<td\s[^>]*class=\"streamdata\">(.*)<\/td>/isU', $str, $match)){
$x = explode(" * ",$match[1][9]);
return $x[1];
}
}
?>
<?php
echo $current_song;
?>
答案 0 :(得分:4)
我认为async: false
正在劫持你的倒计时功能。你需要它是假的吗?
答案 1 :(得分:0)
function ()
{
var result = null;
var scriptUrl = "get_current_song.php";
$.ajax({
url: scriptUrl,
type: 'get',
dataType: 'html',
async: true, // NEEDED TO BE TRUE
success: function(data) { // on success, I get the data
song = $('#song').html();
if (data != song && data != ""){
setTimeout(function (){ $('#nowplaying').load('nowplaying.php'); }, 5000); // pourquoi fadeIn("slow"); ?!?
}
}
});
}, 10000);