AJAX json unexpected token '

23,204

Solution 1

The ' characters around your JSON make it a JavaScript string and don't form part of the data.

It looks like you have those characters in the JSON that you are requesting over HTTP so there they do form part of the data.

This is not valid JSON. Remove the quotes.

You should have:

{"code": 123}

Not

'{"code": 123}'

Solution 2

Try changing dataType to JSON:

$.ajax({
    dataType: 'JSON',
    url: '/_/js/answers.json',
    type: "GET",
    success: function (data) {
        alert(data);
        alert(data.code);
        var result = JSON.parse(data);
        var hey = JSON.parse('{"code": 123}'); 
        alert(hey.code);
        alert(result.code);
    },
    error: function () {
        alert("code not found");
    }
});
Share:
23,204
bhc11
Author by

bhc11

Updated on April 20, 2020

Comments

  • bhc11
    bhc11 about 4 years

    I have this code:

        $.ajax({
                dataType: 'text',
                url: '/_/js/answers.json',
                type: "GET",
                success: function (data) {
                    alert(data);
                    alert(data.code);
                    var result = JSON.parse(data);
                    var hey = JSON.parse('{"code": 123}'); 
                    alert(hey.code);
                    alert(result.code);
                },
                error: function () {
                    alert("code not found");
                }
            });
    

    In the first alert, alert(data) it shows me '{"code": 123}', in the second alert alert(data.code), it tells me undefined, in the third alert alert(hey.code), it shows me 123, and that's what I want, but in the fourth alert, the console tells me Uncaught SyntaxError: Unexpected token '.
    When I change the JSON.parse to $.parseJSON, it does exactly the same things.
    I don't know what's wrong, the json is fine (exactly the same as the json in var hey).

    I passed the json to the server like this: javascript:

    var json = {code: code};
            json = JSON.stringify(json);
            json = {data: json};
    
            $.ajax({
                url: "/_/js/write-json.php",
                type: "POST",
                dataType: 'json',
                data: json
            }); 
    

    php:

        <?php
        $myFile = "answers.json";
        $fh = fopen($myFile, 'w') or die("can't open file");
        fwrite($fh,var_export($_POST['data'], true));
        fclose($fh);
        ?>
    

    Thanks, bhc11.