-2

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 の部分:

$.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\" }";
4

6 に答える 6

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);

});
于 2013-10-15T19:19:57.010 に答える
0

visitas配列を囲む引用符を削除します。

var json = JSON.parse('{"asn": "167","jte": "[[1381547700000,0.0], [1381548600000,0.0]]", "visitas": [{"x": "1380596400000", "text":"HELLOWORLD.","title":"X"}]}');
于 2013-10-15T19:01:55.637 に答える
0

最も外側の JSON オブジェクトは問題ないように見えますが、ネストされた JSON オブジェクトに問題がある可能性があります!

ネストされた JSON 要素「visitas」を解析しようとしている場合、プロパティ名 (x、テキスト、タイトルなど) が引用符 (") で囲まれていないという事実に問題がある可能性があります。これはもちろん少し注意が必要です。 visitas 要素を文字列として含めようとしているためです。

解決策は、代わりに適切な JSON 要素として visitas 要素を含めることです。

于 2013-10-15T19:02:43.247 に答える
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;
于 2013-10-15T19:55:00.630 に答える
0

一重引用符をエスケープする必要があります。JSON.parseに渡すときに、上記を一重引用符で囲んでいると思います。

以下は動作します。

JSON.parse('{"asn":"167", "jte":"[[1381547700000,0.0], [1381548600000,0.0]]", "visitas":"[{x:1380596400000,text:\'HELLO WORLD.\',title:\'X\'}]"}');

文字列内の一重引用符の前のスラッシュに注意してください。

于 2013-10-15T19:04:03.097 に答える