2

この質問は、私がここに書いた以前の質問に関連しています。

この JSON 構文は正しいですか? 後でjqPlotチャートを作成するために必要です。

[{"Date":"2012-02-29","Close":"87.60"},{"Date":"2012-02-28","Close":"87.77"},{"Date":"2012-02-27","Close":"88.07"}]

jQuery.parseJSON(jsonString);この文字列ではorを使用できないため、これを尋ねJSON.parse(jsonString);ます。Firefox は以下を返します:

SyntaxError: JSON.parse: 予期しない文字 @ index2.php:677


これを生成する PHP コードは次のとおりです。

<?php
    $req = $bdd->prepare('SELECT Date, Close FROM quotes WHERE Symbol = ? AND Date > ? AND Date < ?');
    $req->execute(array($_GET['id'], $_GET['datemin'], $_GET['datemax']));

    $test=array();
    while ($donnees = $req->fetch(PDO::FETCH_ASSOC))
    {
        // echo print_r($donnees) . "<br />";
        // echo $donnees[Date] . "<br />";
        $test[] = $donnees;
    }

    echo json_encode($test);
?>

何が悪いのかわからない。



編集: Javascript コードが追加されました。

<script>
$("button").click(function(){
    $.get("requete_graph.php", {
        id: param1,
        datemin: param2,
        datemax: param3
    }, function(data,status){
        console.log(data);
        make_graph(data);
    }, "json");
}); 

function make_graph(toto) {
    alert("String before : " + JSON.stringify(toto));
    var json_parsed = JSON.parse(toto);
    alert("String after : " + JSON.stringify(json_parsed));

    $(document).ready(function(){
        var plot1 = $.jqplot('chartdiv', json_parsed);
    });
}
</script>
4

3 に答える 3

0

jQuery.get、適切な dataType パラメーター (あなたが行った) または content-type ヘッダーが与えられた場合、JSON は既に解析されています。コールバック関数はdata、文字列ではなく配列をパラメーターとして受け取ります。

var json_parsed = JSON.parse(toto);

totoJSON文字列ではないため、エラーがスローされます(FF.toString()は配列に見え、無効な​​文字に遭遇します)。代わりに、使用するだけです

function make_graph(toto) {
    console.log(typeof toto, toto);
    alert("String before : " + JSON.stringify(toto));
    var json_parsed = toto; // or just use `toto` everywhere

    $(document).ready(function(){
        var plot1 = $.jqplot('chartdiv', json_parsed);
    });
}
于 2013-06-04T19:34:08.467 に答える
0

PHP スクリプトの先頭に、以下を追加します。

header('Content-type: text/json; charset=utf-8');

持っていない場合、サーバーはそれをプレーンテキストとして送信し、ブラウザーはそれが json 文字列であることを認識しません。

于 2013-06-04T18:07:05.190 に答える
0

JSON は確かに有効です ( jsonlint.comで確認できます) 。

JSON の後に空白以外の余分な文字が送信されるために問題が発生している可能性があります (例: PHP エラー/警告)。dieJSON が PHP の関数を使用してコンテンツを送信し、実行を停止した後、他に何も出力されないことを保証する良い方法です。

die(json_encode($test));

// OR
echo json_encode($test);
die();
于 2013-06-04T17:53:54.857 に答える