Howdy_McGee
Howdy_McGee

Reputation: 10635

Unexpected Token '<' - AJAX

So I'm trying to output an array to javascript which will tell me if certain streams are online or offline. Every time I try to alert the output it gives me an unexpected token '<' at line 1 of my document. It's driving me nuts. My code is fairly straight forward:

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 files just contain flash embed objects. I have no idea what is going on - I know that $streams is definitely returning an array so not sure what to do. I am getting the Error in my javascript debugger.

Upvotes: 0

Views: 7193

Answers (2)

objects
objects

Reputation: 8677

It sounds like it is failing to parse your returned json (xmlhttp.responseText) Instead of looking at the value of the response text to see why it cannot be parsed

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

Try adding the parameter to the url, I think you can only send params with send() for POST requests

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

Upvotes: 2

Chris
Chris

Reputation: 756

Typically that means that you're request is failing and you're probably getting an html page instead of a JSON response. Parse is failing because it's receiving html and not a JSON object. Verify that the target url for the ajax is only returning valid JSON, any templating system wrapping the response, or a 404 will give you that response.

You can also use firebug or the chrome developer tool, look at your XHR requests and see what's in the body, if its not something like {my_data:' '} then you've probably got an issue.

As another note you do not need the "?>" at the end of your file, they cause more issues than there worth if you end up with an extra line and even Zend recommends you don't use them.

Upvotes: 0

Related Questions