-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ではなくJSONを含むJavaScript文字列を生成する必要があります。

于 2013-02-14T15:45:35.547 に答える
1

ここで私が目にする2つの問題があります(PHPの短いタグの使用に加えて)。まず、すべての行の終わりにセミコロンがありません。そして2番目は並んでいます

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 に答える