-1

我无法在我的网站中嵌入 json。

这是html和javascript:

<!doctype html>
<html lang="us">
<head>
    <meta charset="utf-8">
    <title>jQuery UI Example Page</title>
    <link href="css/custom-theme/jquery-ui-1.10.0.custom.css" rel="stylesheet">
    <script src="js/jquery-1.9.0.js"></script>
    <script src="js/jquery-ui-1.10.0.custom.js"></script>
    <script>

    function isJSON(str) {
        try {
            JSON.parse(str)
        } catch (e) {
            return false
        }
        return true
    }

    jQuery(function(){

        <?
            $arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);
        ?>

        data = <?= json_encode($arr) ?>

        if (isJSON(data)) {
            json = jQuery.parseJSON(data)
            console.log(json)
        } else {
            console.log("Not a json.")
            console.log(data)
            console.log(jQuery.parseJSON(data))
        }

    })


    </script>

<body>


</body>
</html>

这在控制台中输出以下内容:

Not a json. filename.php:29
Object {a: 1, b: 2, c: 3, d: 4, e: 5} filename.php:30
Uncaught SyntaxError: Unexpected token o 

已经度过了漫长的一天,而且很可能(希望)我错过了一些明显的东西。我尝试在这里验证生成的 json:http: //jsonlint.com/并且根据他们的站点它是有效的。

提前致谢!

4

2 回答 2

2

JSON(或多或少)是一种 JavaScript 文字。

如果将其转储到脚本中,则根本不需要解析它。

var data = <?php echo json_encode($arr); ?>;
console.log(data);

如果你想传递一些东西,jQuery.parseJSON那么你需要生成一个包含 JSON 的 JavaScript 字符串,而不是纯 JSON。

于 2013-02-14T15:45:35.547 回答
1

我在这里看到了两个问题(除了使用 PHP 短标签)。首先,您在所有行的末尾都缺少分号。第二个是在线的

data = <?= json_encode($arr) ?>;

这将产生类似的东西:

data = {"a": 1, "b": 2, ...};

这已经是一个解码的对象。你不能再json_decode这样了。而且没有必要这样做。如果您坚持使用json_decode它,则需要将其输出为字符串:

data = "<?= str_replace("\"", "\\\"", json_encode($arr)) ?>";

这将产生如下内容:

data = "{\"a\": 1, \"b\": 2, ...}";

现在你data包含一个字符串,它可以是json_decoded。

于 2013-02-14T15:50:16.907 回答