2013-08-04 1 views
0

Я использую обратный отсчет javascript-песен на моем радио-сайте.javascript обратный отсчет отставания из-за вызовов ajax

На каждые 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; 
?> 
+1

Не выполняйте синхронизацию вызова ASYNCHRONOUS;) – Andreas

+0

@Jeffman верен. Удалите 'async: false' (по умолчанию это неявный' async: true'), если вам это не нужно. – ale

+0

Спасибо! Это было так. – trogne

ответ

4

Я предполагаю, что async: false является угон вашей функции обратного отсчета. Вам нужно, чтобы это было ложным?

+0

Ничего себе! Понимаю. Теперь больше нет. Спасибо за быстрый ответ. – trogne

+0

Не работает, потому что асинхронно. См. Выше – trogne

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