json_encode非常挑剔吗?

时间:2014-07-27 08:48:38

标签: javascript php session json

看来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。

2 个答案:

答案 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。

希望这有帮助!