2012-03-23 21 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); 
    } 
?> 

My IframeのhtmlファイルにはFlash埋め込みオブジェクトしか含まれていません。私は何が起こっているのか分かりません - $streamsは確実に何をすべきかわからない配列を返しています。私はJavaScriptのデバッガでエラーが発生しています。あなたの返却JSON(xmlhttp.responseText)を解析するために失敗しているようですね

+0

リクエストに対する応答は何ですか? (ネットワークパネル、たとえばお気に入りの開発者ツールパネルを参照)。問題を引き起こす警告が表示されることがあります。 – Ryan

+0

「予期しないトークン」というエラーメッセージが表示されます。ブラウザ? Javascript? PHP? – deceze

+0

JavaScriptで私のエラーが発生しました。私の質問を更新しました。申し訳ありません。 –

答えて

2

の代わりに、それは

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

を解析できない理由を確認するために応答テキストの値を見ては、にパラメータを追加してみてくださいURLは、私は通常、それはあなたが要求が失敗している、あなたはおそらくhtmlページの代わりに、JSONレスポンスを取得しているしていることを意味し、あなただけPOSTのセンド()とのparamsを送ることができると思い

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

さて、私はそれをして、私は空白の行を得た。私はPHPが何も返さないことを意味していると仮定していますが、その配列の値をエコーアウトしようとするとうまく動作します。 Javascriptファイルに戻す前に、PHPで何か不足していますか? –

+0

チェックされたパラメータを移動してみてください(編集済みの回答を参照) – objects

+0

ちょっと!それは働いた:Dありがとう! –

0

を要求します。 JSONオブジェクトではなくhtmlを受け取っているため、解析が失敗しています。 ajaxのターゲットURLが有効なJSON、つまり応答をラップするテンプレートシステムのみを返すことを確認します。そうでない場合は、404がその応答を返します。

firebugやchromeデベロッパーツールを使用して、XHRリクエストを見て、{my_data: ''}のようなものでなければ身体の中身を確認して問題が発生している可能性があります。

ファイルの最後に "?>"は必要ありませんが、余分な行で終わると価値があるよりも多くの問題を引き起こし、Zendでもそれらを使用しないことをお勧めします。

+0

もチェックに合格していることを確認してください。 – Chris

関連する問題