-1

動的に生成されるphp多次元配列があります

Array
(
    [0] => Array
        (
            [cid] => 73
            [type] => 2
            [qrystr] => Qtest1
            [trck_no] => (570) 244-3738
            [trgt_no] => 1919674683063
            [webpage] => Array
            (
                [0] => Array
                    (
                        [wid] => 40
                        [page_url] => www.ctest2.com
                    )
                [1] => Array
                    (
                        [wid] => 41
                        [page_url] => www.ctest3.com
                    )
            )
    )
[1] => Array
    (
        [cid] => 75
        [type] => 3
        [qrystr] => Qtest6
        [trck_no] => 
        [trgt_no] => 
        [webpage] => Array
            (
                [0] => Array
                    (
                        [wid] => 42
                        [page_url] => www.test1.com
                    )
                [1] => Array
                    (
                        [wid] => 43
                        [page_url] => www.test1.com
                    )
            )
    )

)

Javascriptに変換したい。そのために、私はすでにjson_encode()phpで使用してエンコードしており、これは同じ出力です:

[{"cid":"73","type":"2","qrystr":"Qtest1","trck_no":"(570) 244-3738","trgt_no":"1919674683063","webpage":[{"wid":"40","page_url":"www.ctest2.com"},{"wid":"41","page_url":"www.ctest3.com"}]},{"cid":"75","type":"3","qrystr":"Qtest6","trck_no":"","trgt_no":"","webpage":[{"wid":"42","page_url":"www.test1.com"},{"wid":"43","page_url":"www.test1.com"}]}]

これを使用して解析するたびにJavaScriptJSON.parse()でエラーメッセージが表示されます(つまり、SyntaxError:JSON.parse:予期しない文字)。

よろしくお願いします。

編集:

私のphpファイルは別のサーバーにあり、「id」に基づいてデータベースから情報を収集し、配列に保存します。

これが私のphpコードです:

           foreach($campaigns as $campaign){

        if(($campaign->type == 2) || ($campaign->type == 3)){
            foreach($campaign->webpage as $webpage){

                $webpages[] = array(
                                 'wid'=>trim($webpage->id),
                                 'page_url'=>trim($webpage->page_url)
                            );

            }
        }else{
            $webpages = "";
        }

        $campaign_details[] = array(
                               'cid'=>trim($campaign->id),
                               'type'=>trim($campaign->type),
                               'qrystr'=>trim($campaign->qrystr),
                               'trck_no'=>trim($campaign->trcknmb->frnd_name),
                               'trgt_no'=>trim($campaign->trcknmb->trgtnmb->phone_no),
                               'webpage'=>$webpages
                            );
        unset($webpages);                   

    }

            $cdetails =  json_encode($campaign_details);
    echo $cdetails;

配列の値を取得するためにクロス ドメイン リクエストを行います。

json文字列を解析するための私のJavascriptコードは次のとおりです。

           function handler(evtXHR)
           {
            if (invocation.readyState == 4)
              {
               if (invocation.status == 200)
                {
                  response = invocation.responseText;
                  var content = JSON.parse(response);
                  alert(content);
                }
               else
                {
                  alert("Invocation Errors Occured");
                }
              }
           }  

出力結果を確認するアラート機能をここに配置します。

4

3 に答える 3

3

Javascript では、そのまま有効な Javascript 配列であるため、解析する必要はありません。

単に:

var myData = <?php echo json_encode($data); ?>;

for(var i=0; i<myData.length; i++) {
    console.log( myData[i].cid );
    console.log( myData[i].type );
    console.log( myData[i].webpage[0].wid );
}

JSON.parse を呼び出すときに JSON を引用する際に問題があるため、エラーが発生している可能性があります。

于 2013-07-09T06:42:08.417 に答える
0

JSONを文字列として引用していませんか?そうでなければ、私がしたときに同じjsonが機能しました

JSON.parse('<your stuff>');
于 2013-07-09T06:41:52.283 に答える
0

に置き換え"ました\"か?実行に問題がないため:

JSON.parse("[{\"cid\":\"73\",\"type\":\"2\",\"qrystr\":\"Qtest1\",\"trck_no\":\"(570) 244-3738\",\"trgt_no\":\"1919674683063\",\"webpage\":[{\"wid\":\"40\",\"page_url\":\"www.ctest2.com\"},{\"wid\":\"41\",\"page_url\":\"www.ctest3.com\"}]},{\"cid\":\"75\",\"type\":\"3\",\"qrystr\":\"Qtest6\",\"trck_no\":\"\",\"trgt_no\":\"\",\"webpage\":[{\"wid\":\"42\",\"page_url\":\"www.test1.com\"},{\"wid\":\"43\",\"page_url\":\"www.test1.com\"}]}]")
于 2013-07-09T06:42:34.090 に答える