2012-01-24 16 views
0

最初に、私は答えのためにスタックオーバーフローを検索しましたが、動作する解決策が見つかりませんでした。json_encodeは改行をエスケープしません

MVCフレームワーク(yii)を使用していくつかのビューを生成し、配列にスローします。各ビューはカードであり、私はカードの配列($デッキ)と配列の配列($ hands、各プレイヤーの手のリスト)を持っています。私はPHPで作成された手を保存するためにフロントエンドでjavascript変数を設定しようとしています。私の見解は、複数の行に注目する価値があります。実際には、私の現在のテストビューのみで構成されています

test 
test 

私はそのためjson_encodeを使用しますが、私は$ .parseJSON()を使用する場合、それは私に次のエラーを与えている:

Uncaught SyntaxError: Unexpected token t 

私は他の場所で読んでいます何らかの理由でjson_encodeを2回使用する必要があります。私はこれを試しましたが、それは助けになりません。単一json_encodeで

$handsをエコーの出力は(出口に続いて)かなり健康になります。

[["test\ntest","test\ntest","test\ntest","test\ntest", etc... 

しかし、私は終了していないとき、私は構文エラーを毎回取得します。

編集:ここに私のコードのサンプルがあります。 $ cardsは通常はHTMLの配列ですが、私の単純化されたケースではまだエラーがありますが、上記の2行の 'test'しか含まれていません。 JavaScriptで

$deck = array(); 
    foreach ($cards as $card) { 
     $deck[] = $this->renderPartial('/gamePieces/cardTest', 
       array('card'=>$card), true); 
    } 
    $hands = Cards::handOutCards($deck, $numCards , $numPlayers); 
    $hands = json_encode($hands); 

    echo $hands; exit; 

、私は次のことをやっている:

var hands = $.parseJSON('<?php echo json_encode($hands); ?>'); 

ページロードでそれがエラー。

助けていただけたら幸いです! '文字がエンコードされた文字列である場合、それはJavascriptの構文を破るよ

var hands = $.parseJSON('{"foobar":"baz'"}'); 

おかげで、

ParagonRG

+3

json_encodeを2回使用することはほとんど意味がありません。 – Pointy

+0

それでは、退出はどうしたらいいですか? JSON配列の括弧の前に余分なクォートがあるのはなぜですか? – mario

+1

'json_encode'を使用する部分を含め、実際のコードの一部を表示してください – nnnnnn

答えて

5
var hands = $.parseJSON('<?php echo json_encode($hands); ?>'); 

はこのようなものになります。あなたが直接JavacriptにJSONを出力しているので、ちょうど行います

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

JSONが構文的に有効なJavaScriptです。たとえば、AJAXを介して文字列として受け取った場合は、それを解析するか、evalを解析する必要があります。 Javascriptのソースコードを直接生成している場合は、直接埋め込みます。

+0

ありがとうございます。これは私が得ていなかった根本的な問題でした。問題が解決しました。 – Paragon

関連する問題