user400055
user400055

Reputation:

Creating JSON data using PHP and parsing it using jQuery

I am using a PHP script to create JSON data. It looks like this:

{"Id":0}

Now if I put that into a file and then load it using ajax it's fine. But if I request this from the PHP script I get

parsererror | SyntaxError: Unexpected token ILLEGAL

Here is the code that I am using to load the JSON from the PHP:

$.ajax({
                    url: 'check.php',
                    data: {
                        username: 'LOL',
                        password: '1234'
                    },
                    dataType: 'json',
                    type: 'POST',
                    success: function(data) {
                        $('#result').html('#Id=' + data.Id);
                    },
                    error: function(jqXHR, textStatus, errorThrown) {
                        $('#result').html(textStatus + ' | ' + errorThrown);
                    }
                });

Here is the PHP code:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<?php

    echo '{"Id":0}';

?>

Any ideas?

Upvotes: 2

Views: 7928

Answers (3)

Kugutsumen
Kugutsumen

Reputation: 600

use jquery's parseJSON
e.g.

success: function(data) {
    data = jQuery.parseJSON(data);
 $('#result').html('#Id=' + data.Id);
}

Upvotes: 0

Praveen Lobo
Praveen Lobo

Reputation: 7187

In your error function use this and check what data is being returned from the server.

error: function(jqXHR, textStatus, errorThrown) {
   $('#result').html(textStatus + ' | ' + errorThrown + ' | ' + jqXHR.responseText);
   alert(jqXHR.responseText);
}

You will know where exactly it is going wrong. The data type and the special characters. Set the content type to application/json and encode your json string using json_encode(). Also, you don't need the doctypes.

Upvotes: 1

Phil
Phil

Reputation: 164946

Doctypes belong on HTML documents, not JSON.

Try something like this in your PHP file (and only this)

<?php
header('Content-Type: application/json');
?>
{"Id":0}

Given what you have posted, I can't see any reason to even involve PHP. I'm guessing you've only posted a very simple example. Should it become more complex, involving server-side processing, data retrieval, etc, use PHP's json_encode(), for example

<?php
header('Content-Type: application/json');
$data = array(
    'Id'  => 0,
    'foo' => $someOtherComplexVariable
);
echo json_encode($data);
exit;

Upvotes: 7

Related Questions