I already looked up questions about this topic but couldn't figure my problem out. I have a php file which contains the array:
$data = ['logged' => $_SESSION['loggedin'], 'sessName' => $_SESSION['name']];
echo json_encode($data);
Here's my AJAX code, but I have no idea what should I put in "data". Basically my goal is to use the $data array in my Javascript code. (So i can manipulate DOM with conditions).
<script>
$.ajax({
type: 'POST',
dataType: "json",
url:'sign-in.php',
data:
success: function(data)
{
try {
data = JSON.parse(data);
}catch(e) {}
console.log(data);
}
});
</script>
2 Answers 2
By specifying dataType: "json" in your $.ajax call, jQuery will automatically parse your JSON data into javascript object / array for you. You can probably remove the JSON.parse form you code.
Also there is an extra data: line, which would be a javascript syntax error.
<script>
$.ajax({
type: 'POST',
dataType: "json",
url:'sign-in.php',
success: function (data) {
console.log(data);
},
});
</script>
One more thing. Your PHP code, expects both 'loggedin' and 'name' to be set in your $_SESSION. If not, your PHP (depends on settings) might generate warning message in between and cause JSON parsing error.
You can use the null coalescing operator (introduced since PHP 7.0) to assign some value if either or both values are not set:
$data = [
'logged' => $_SESSION['loggedin'] ?? FALSE,
'sessName' => $_SESSION['name'] ?? '',
];
echo json_encode($data);
Updated: Add proper handling to potential invalid key issue.
4 Comments
echo, everything outside of the PHP tags is collected to the output buffer with the output of the script commands, and the content of the buffer is sent as the response when the file ends.In your example you haven't intiliaze the session with session_start(), also it recomanded to indicate the response content type, and i fix also your ajax request :
PHP :
session_start();
$data = [
'logged' => $_SESSION['loggedin'],
'sessName' => $_SESSION['name'],
];
header("Content-type: application/json");
echo json_encode($data);
exit();
Jquery :
$.ajax({
type: 'GET',
dataType: "json",
url:'sign-in.php',
success: function(data)
{
try {
data = JSON.parse(data);
} catch(e) {}
console.log(e);
}
}
});
datain your ajax success method contains the array. Try, for example,var logged = data.logged;datavariable as it is. When you setdataTypeof the AJAX call, the response value is handled as JSON, and it is parsed for you by jQuery. "dataType "json" : Evaluates the response as JSON and returns a JavaScript object."datais already being supplied to thesuccessfunction. Have you checked what's already indatabefore trying to modify it?data? What did yourconsole.log(data)show?header('Content-type: application/json');echo json_encode($data);