我正在尝试在PHP / Ajax响应上传递此结构:
{"asn":"167", "jte":"[[1381547700000,0.0], [1381548600000,0.0]]", "visitas":"[{x:1380596400000,text:'HELLO WORLD.',title:'X'}]"}
但是JSON.parse会返回错误。
SyntaxError: JSON.parse: expected property name or '}'
没有“visitas”对象,一切运行正常。是否有可能“嵌套”?
更新:
Ajax Part:
$.ajax({
type: 'post',
url: 'cxxx.php',
data: { asn: asn },
success: function(p){
p = JSON.parse(p);
jusante=JSON.parse(p.jusante);
montante=JSON.parse(p.montante);
vazao=JSON.parse(p.vazao);
minima=JSON.parse(p.minima);
fator=JSON.parse(p.fator);
visitas=JSON.parse(p.visitas)
和PHP部分:
$v="[";
while(odbc_fetch_row($res)){
$datavisita = odbc_result($res, "DATA_VISITA");
$descricaovisita = odbc_result($res, "DESCRICAO_VISITA");
$login = odbc_result($res, "LOGIN");
$descricaomotivo = odbc_result($res, "DESCRICAO_MOTIVO");
$id_motivo=odbc_result($res, "ID_MOTIVO");
$datavisita=date("U", strtotime($datavisita))*1000;
$descricaovisita=preg_replace("/\r|\n/", "", $descricaovisita);
$v.="{x:$datavisita,text:'$descricaovisita',title:'$id_motivo'}, ";
}
$v=rtrim($v,", ")."]";
echo "{\"asn\": \"$asn\", \"description\": \"$description\", \"jusante\": \"$o\", \"montante\": \"$m\", \"vazao\": \"$f\", \"minima\": \"$mn\", \"fator\": \"$fp\", \"visitas\": \"$v\" }";
答案 0 :(得分:1)
你正在使用的Json是有效的,我在JSONLint检查了它,所以你的问题可能是序列化,只是确保你的“visitas”对象被正确序列化,因为问题可能正在发生,因为它是唯一的
中包含对象值的成员答案 1 :(得分:0)
删除visitas
数组周围的引号:
var json = JSON.parse('{"asn": "167","jte": "[[1381547700000,0.0], [1381548600000,0.0]]", "visitas": [{"x": "1380596400000", "text":"HELLOWORLD.","title":"X"}]}');
答案 2 :(得分:0)
虽然最外面的JSON对象看起来很好,但是嵌套的JSON对象可能有问题!
如果你试图解析嵌套的JSON元素“visitas”,你可能会遇到一个问题:你的属性名称(例如x,text和title)没有用引号(“)括起来。这当然是因为你试图将visitas元素包含在一个字符串中,所以有点棘手。
解决方案可能是将visitas元素包含为适当的JSON元素。
答案 3 :(得分:0)
你需要逃避单引号。当你把它传递给JSON.parse时,我想你用单引号围绕上面的内容。
以下作品。
JSON.parse('{"asn":"167", "jte":"[[1381547700000,0.0], [1381548600000,0.0]]", "visitas":"[{x:1380596400000,text:\'HELLO WORLD.\',title:\'X\'}]"}');
请注意字符串中单引号前的斜杠。
答案 4 :(得分:0)
我会做以下事情:
var jsondata = {
"asn": "167",
"jte": "[[1381547700000,0.0], [1381548600000,0.0]]",
"visitas": "[{x:1380596400000,text:'HELLO WORLD.',title:'X'}]"
};
jsondata = JSON.stringify(jsondata);
然后将其发送到php
var postdata = { data : jsondata};
var url = "<?php echo base_url(); ?>"+"test";
$.post(url, postdata, function(result){
console.log(result);
});
答案 5 :(得分:0)
你的php结果是以错误的方式回应你应该首先修复它。创建数组,以便您可以轻松地使用JSON_ENCODE函数:
$array = array(
"asn" => "test_asn",
"description" => "description_test",
"jusante" => "jusante_test",
"montante" => "montante_test",
"vazao" => "vazao_test",
"minima" => "minima_test",
"fator" => "fator_test",
"visitas" => "visitas_test"
);
$json = json_encode($array);
echo $json;