2012-03-23 6 views
0

Итак, я пытаюсь вывести массив в javascript, который скажет мне, если определенные потоки находятся в сети или в автономном режиме. Каждый раз, когда я пытаюсь предупредить выход, он дает мне неожиданный токен «<» в строке 1 моего документа. Это сводит меня с ума. Мой код довольно прямо вперед:Неожиданный токен '<' - AJAX

HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <title>Streaming</title> 
    <style type="text/css"> 
     *{margin:0px;padding:0px;font-family:Arial} 
     #container{margin:0 auto;width: 1000px} 
     #player iframe{width:625px;height:510px;} 
     #player{float:left} 
    </style> 
    <script type="text/javascript" src="dynamic.js" ></script> 
</head> 
<body> 
    <div id="container"> 
     <div id="player"> 
      <iframe src="streams/tx3fate.html" frameborder="0" scrolling="no"></iframe> 
     </div> 
     <iframe frameborder="0" scrolling="no" id="chat_embed" src="http://twitch.tv/chat/embed?channel=day9tv&amp;popout_chat=true" height="500" width="350"></iframe> 
    </div> 
</body> 
</html> 

Javascript

function getActive() { 
    if(window.XMLHttpRequest) { 
     xmlhttp = new XMLHttpRequest(); 
    } else { 
     xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 

    xmlhttp.onreadystatechange = function() { 
     if(xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
      var test = JSON.parse(xmlhttp.responseText); 
      window.alert(test); 
     } 
    } 

    xmlhttp.open("GET", "streams.php", true); 
    xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
    xmlhttp.send('check=true'); 
} 

getActive(); 

PHP

<?php 
    if($_GET['check'] == true) { 
     $streams = array(
      "mxgdichello" => "offline", 
      "day9tv" => "offline", 
      "tx3fate" => "offline", 
      "wochtulka" => "offline", 
      "unawaresc2" => "offline", 
      "xerse" => "offline", 
      "atree2425" => "offline", 
      "sc1pio" => "offline", 
      "lokk_2" => "offline", 
      "tsremark" => "offline", 
      "ognastarcraft" => "offline" 
     ); 

     foreach($streams as $index) { 
      $json_file = @file_get_contents("http://api.justin.tv/api/stream/list.json?channel={$index}", 0, null, null); 
      $json_array = json_decode($json_file, true); 

      if ($json_array[0]['name'] == "live_user_{$index}") { 
       $index = "online"; 
      } else { 
       $index = "offline"; 
      } 
     } 

     echo json_encode($streams); 
    } 
?> 

Мои файлы iframe html содержат только объекты Flash. Я понятия не имею, что происходит - я знаю, что $streams определенно возвращает массив, поэтому не уверен, что делать. Я получаю сообщение об ошибке в своем отладчике javascript.

+0

Каков ответ на запрос? (См. Панель «Сеть», например, на панели избранных инструментов разработчика.) Может возникнуть предупреждение, вызывающее проблему. – Ryan

+0

Что именно дает вам сообщение об ошибке «неожиданный токен»? Браузер? Javascript? PHP? – deceze

+0

Я получаю свою ошибку в javascript, обновляю свой вопрос, извините. –

ответ

2

Похоже, он не в состоянии разобрать ваш возвращенный JSON (xmlhttp.responseText) Вместо того, чтобы смотреть на значение текста ответа, чтобы понять, почему это не может быть разобрано

if(xmlhttp.readyState == 4 && xmlhttp.status == 200) 
    { 
     console.log(xmlhttp.responseText); 
     var test = JSON.parse(xmlhttp.responseText); 

Try добавления параметра в URL-адрес, я думаю, что вы можете только отправить Params с посылом() для POST запросов

xmlhttp.open("GET", "streams.php?check=true", true); 
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
xmlhttp.send(); 
+0

Хорошо, я сделал это, и я просто получил пустую строку. Я предполагаю, что это означает, что мой PHP ничего не возвращает, но если я попытаюсь отобразить значения этого массива, он отлично работает. Я что-то пропустил на своем PHP, прежде чем отправить его обратно в свой файл Javascript? –

+0

попробуйте переместить проверочный параметр (см. Отредактированный ответ) – objects

+0

Эй! Это сработало: D Спасибо! –

0

Обычно это означает, что вы запрос не удается, и вы, вероятно, получить HTML-страницу вместо ответ JSON. Parse не работает, потому что он получает html, а не объект JSON. Убедитесь, что целевой URL-адрес для ajax возвращает только действительный JSON, любая система шаблонов, завершающая ответ, или 404 даст вам ответ.

Вы также можете использовать firebug или инструмент для создания хрома, посмотреть ваши запросы XHR и посмотреть, что находится в теле, если это не что-то вроде {my_data: ''}, то у вас, вероятно, возникла проблема.

В качестве другой заметки вам не нужно «?>» В конце вашего файла, они вызывают больше проблем, чем стоит, если вы закончите с дополнительной строкой, и даже Zend рекомендует вам не использовать их.

+0

также проверю, что проверка также проходит. – Chris

Смежные вопросы