簡體   English   中英

解析JSON:意外字符

[英]Parsing JSON : unexpected character

這個問題與我在這里寫的上一個問題有關。

這個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); JSON.parse(jsonString); 用這個字符串。 Firefox返回:

語法錯誤: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>

JSON確實有效(您可以在jsonlint.com上進行檢查)

您的問題可能是由於在JSON之后發送了額外的非空格字符引起的(例如:PHP錯誤/警告)。 保證在JSON使用PHP的die函數發送內容然后停止執行后,不會輸出任何其他東西的好方法。

die(json_encode($test));

// OR
echo json_encode($test);
die();

在PHP腳本的頂部,添加:

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

如果沒有它,服務器將把它作為純文本發送,並且您的瀏覽器將不知道它是一個json字符串。

給定正確的dataType參數(您已完成此操作)或內容類型標頭, jQuery.get已經為您解析了JSON。 您的回調函數接收一個數組作為data參數,而不是字符串。

 var json_parsed = JSON.parse(toto); 

然后將引發錯誤,因為toto不是JSON字符串(您的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);
    });
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM