I am working on a project where I use a lot of http requests. Most of the time the server will respond as a json with either:
{"error": "Request invalid"}
or
{"success": "Request successful"}
The server side page that returns the response looks like this:
<?php
header('Content-type: application/json');
$data = [];
if (isset($_POST['action']) {
if ($_POST['action'] == 'function_one') {
/* Arbitary Function... */
$data['success'] = 'This works...';
} elseif ($_POST['action'] == 'function_two') {
/* Arbitary Function... */
$data['error'] = 'Example error';
} elseif ($_POST['action'] == 'function_that_is_not_working') {
$data['success'] = 'This unexpectedly does not interpret correctly...';
}
}
$post_data = json_encode($data);
print_r($post_data);
?>
The javascript file does the http request and handles the data similar to:
if (xml_http.readyState == 4 && xml_http.status == 200) {
try {
console.log(JSON.parse(xml_http.responseText));
return JSON.parse(xml_http.responseText);
} catch (e) {
console.log(xml_http.responseText);
return xml_http.responseText;
}
}
So this all works absolutely fine, I have multiple functions all using the same code without an issue. The problem I have is that I have one specific action that does a request, if I set $data['success'] it does not interperet as a JSON object, but a string. If I set the key as anything else, it works fine.
I have tried commenting out the function in case there is some unexpected echo's etc. The JSON string is a valid JSON string, it's just this one action when using the success key that the JSON.parse doesn't see it as valid JSON so just outputs the string.
Am I missing something obvious? Are there other ways that I could test this?
Edit After a little more playing around I found out there was nothing wrong with the response, nor the JSON.parse. I had an issue with some of the script after causing an error. Solution: Always look at the bigger picture, and the subsequent processes.