看来json_encode对我的PHP文件中的其他内容非常挑剔。这很好,因为我只是在文件A(带有json_encode)中执行我自己的文件。
我只是想我会问,因为我在$ _SESSION中存储一个变量而不是用变量更新我的数据库,因为当我的文件中包含所有代码时,json_encode似乎不想工作。
例如,此代码不起作用:
<?php
session_start();
include 'dbcon.php';
$sessionID = uniqid();
echo json_encode($sessionID);
if(isSet($_POST['clearSession']) == '1')
{
$query = "UPDATE currentID SET id=('0')";
$execute = $mysqli->query($query) or die($mysqli->error.__LINE__);
} else {
$query = "UPDATE currentID SET id=('$sessionID')";
$result = $mysqli->query($query) or die($mysqli->error.__LINE__);
}
?>
当我在浏览器中访问该文件时,我确实得到了json_encode结果,但是当我的Javascript调用它时,似乎没有正确导入它。
所以,现在我只有两个PHP文件:
<?php
session_start();
$sessionID = uniqid();
$_SESSION["sessionID"] = $sessionID;
echo json_encode($sessionID);
?>
哪个echo与第一个文件中的相同,但这次我的JavaScript正确导入它。
和
<?php
session_start();
include 'dbcon.php';
if(isSet($_POST['clearSession']) == '1')
{
$query = "UPDATE currentID SET id=('0')";
$execute = $mysqli->query($query) or die($mysqli->error.__LINE__);
} else {
$sessionID = $_SESSION["sessionID"];
$query = "UPDATE currentID SET id=('$sessionID')";
$result = $mysqli->query($query) or die($mysqli->error.__LINE__);
}
?>
我想我的问题是,为什么会发生这种情况?我必须将uniqid存储在SESSION中以便我的其他PHP文件可以将其添加到数据库中,这似乎有点愚蠢。然而,如果我只是将它放在一个文件中,那么我可以在生成新的uniqid时更新数据库,并避免首先使用$ _SESSION。
答案 0 :(得分:1)
你有这个:
$sessionID = uniqid();
echo json_encode($sessionID); // "53d4c17abfe87"
由于uniqid()
生成一个纯字符串,因此根据format specification,您的输出不是有效的JSON。你需要这样的东西:
$sessionID = uniqid();
echo json_encode(array($sessionID)); // ["53d4c17abfe87"]
为什么json_encode()
首先会生成无效的JSON?因为有时候生成部分JSON很有用。例如,将值注入生成的JavaScript代码中是一个方便的技巧:
var foo = <?=json_encode($sessionID)?>;
它还documented:
PHP实现了JSON的超集 - 它还将编码和解码 标量类型和NULL。 JSON标准仅支持这些值 当它们嵌套在数组或对象中时。
所以回答问题标题:
json_encode非常挑剔吗?
相反,它相当放松!
答案 1 :(得分:0)
您不需要将它存储在会话中,这是$ _SESSION是一个数组的事实。
所以,你想要的是这样的:
echo json_encode(array('sessionID' => $sessionID));
然后,当您使用JavaScript解析JSON时,您可以像这样访问它:
obj = JSON.parse(jsonObj);
alert(obj.sessionID);
显然,jsonObj
是从服务器传递的JSON。
希望这有帮助!