7

I am making an AJAX GET request using jQuery to a PHP file. I want the PHP script to return a JSON object, however, currently it is returning a JSON string. I realise I can use JSON.parse in the jQuery code, however, any experience I have in making an AJAX call to an API a JSON object is returned. I am trying to do the same with the php script however, it is returning a string as opposed to an object.

Does anyone know what the best practice is here, and if the best practise is to return a JSON object how I would do this using PHP?

Please see the code below:

js

$.get('test.php', function(data){
    console.log((data));
});

php

<?php

$jsonAnswer = array('test' => 'true');
echo json_encode($jsonAnswer);
8
  • What's the problem with JSON.parse? There's probably some jQuery method that parses the response automatically, which might be what you're thinking about. Commented Jul 7, 2016 at 10:58
  • its not that there is a problem with JSON.parse but i just want to know if i can do this server side so that the correct format is received in the browser. does this make sense? Commented Jul 7, 2016 at 10:59
  • You can only send strings over the internet. Commented Jul 7, 2016 at 11:00
  • 1
    There's no such thing as a "JSON object" Commented Jul 7, 2016 at 11:00
  • 1
    That's because jQuery calls JSON.parse for you. Anyway, it works now. Commented Jul 7, 2016 at 11:13

3 Answers 3

12

In your PHP file, change the content type to application/json.

JS

$.get('/process.php', function(data) {      
    console.log(data);
} );

PHP

<?php

    header( "Content-type: application/json" );

    $jsonAnswer = array('test' => 'true');
    echo json_encode($jsonAnswer);

Then your console should read Object {test: "true"} rather than just the JSON string.

Sign up to request clarification or add additional context in comments.

1 Comment

this is what I was looking for
1

Add json to the end of your get function to return json

$.get('test.php', function(data){
    console.log((data));
},'json');//here

and/or add this header in php

header('Content-Type: application/json');

more info here

6 Comments

get, getjson, ajax same thing
@madalinivascu no not same thing.
this is what I was looking for, however, i didn't have to add 'json' to the get request
the json at the end ensures that the data received is parsed as json
@madalinivascu jQuery tries to automatically guess it.
|
0

Without modifying PHP script you can do:

$.get( "test.php", function( data ) {
 var arr = $.parseJSON(data);
 console.log(arr);
 alert(arr.test);
});

1 Comment

Although technically you can just parse the json (you can use JSON.parse() which is native to JavaScript instead of going through the jQuery library to do so), sending text based responses that are meant to be JSON responses is not a good idea and can lead to mismatching data and unexpected results. -1.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.