这个问题与我之前写的here有关。
这种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返回:
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>
答案 0 :(得分:0)
JSON确实有效(您可以在jsonlint.com
查看它由于在JSON之后发送了额外的非空白字符(例如:PHP错误/警告),可能会出现您的问题。在JSON使用PHP的die
函数发送内容然后停止执行之后,保证不输出任何其他内容的好方法。
die(json_encode($test));
// OR
echo json_encode($test);
die();
答案 1 :(得分:0)
在PHP脚本的顶部,添加:
header('Content-type: text/json; charset=utf-8');
如果您没有,服务器将以纯文本形式发送,您的浏览器不知道它是json字符串。
答案 2 :(得分:0)
jQuery.get
,给定正确的dataType参数(您做过)或内容类型标头,已经为您解析了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);
});
}