Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 解析JSON:意外字符_Php_Javascript_Json_Parsing - Fatal编程技术网

Php 解析JSON:意外字符

Php 解析JSON:意外字符,php,javascript,json,parsing,Php,Javascript,Json,Parsing,这个问题与我之前写的一个问题有关 这个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.p

这个问题与我之前写的一个问题有关

这个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>

$(“按钮”)。单击(函数(){
$.get(“requete_graph.php”{
id:param1,
datemin:param2,
datemax:param3
},功能(数据、状态){
控制台日志(数据);
制作图形(数据);
}“json”);
}); 
函数生成图(toto){
警报(“字符串前:“+JSON.stringify(toto));
var json_parsed=json.parse(toto);
警报(“字符串在:“+JSON.stringify(JSON_解析));
$(文档).ready(函数(){
var plot1=$.jqplot('chartdiv',json_解析);
});
}
JSON确实有效(您可以在

您的问题可能是由于在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字符串。

,给定正确的数据类型参数(您已经这样做了)或内容类型头,确实已经为您解析了json。回调函数接收一个数组作为
数据
参数,而不是字符串

然后将抛出一个错误,因为
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);
    });
}

告诉我们,<代码> js>解析> <代码> >调用!您的JSON似乎是有效的,也许您意外地在它周围回响了一些其他字符。它是有效的。将来考虑使用检查。但是,如果它作为JavaScript字符串传递,它只能是可解析的。我们所看到的JSON是正确的。您确定没有别的了吗?浏览器中的结果?@crush不会随机应用
utf8\u encode
,尤其是当数据甚至不包含任何非ASCII字符时。
data
,因此
toto
应该是对象,而不是JSON字符串。为什么要
解析
toto
?我看不到在JSON返回后发送任何额外字符'd、 我看到一个PHP结束标记不需要在那里,但额外的空白不会使他的JSON无效。@我指的是额外的位,如PHP错误或警告-我会更新我的答案以澄清。我更喜欢我自己。此外,我认为这不会解决OP的问题。上面@deceze建议的评论就是问题所在。
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);
    });
}