1

これは単純な埋め込みであり、なぜこのエラーが発生するのかわかりません。

アクションクラスで…

$TESTME = "what";

ビューで....

<script type="text/javascript">
    $(document).ready(function () {
        var someVale = "<?php echo $TESTME; ?>";
        alert(someVale);
    });
</script>

エラーは、変数割り当ての最初の引用符の直後を指しています

すなわち。var someVale = "< br />....

4

2 に答える 2

4

の内容を調べる必要があり$TESTMEます。改行文字または二重引用符が含まれています。通常、表示されるエラーは、問題の文字列が複数の行にまたがっているか、引用符の数が一致していないことを示しています。

あなたの場合、それはおそらく改行です...

var someVale = "< br />
<tag>
<tag>
<tag>";

これは明らかにうまくいかず、最終的には文字列を処理する必要があります...

var someVale = "< br />\n<tag>\n<tag>\n<tag>";

PHP変数を次のように変換できます...

$TESTME = str_replace(chr(13), "\n", $TESTME);

(関係する OS によっては、改行もchr(13) . chr(10).)

于 2013-01-24T15:25:46.597 に答える
0

ほとんどの場合、変数をエコーすることで回避できますが、エコーされた文字列に行末記号または引用符 (別名、文字列区切り記号) が含まれることがあります。テストを繰り返すことはできますが、悪意のある」「予測不可能な」入力から身を守る必要があります。この非常に答えで、私は一重引用符と二重引用符の両方を使用しました。問題を解決する
ことができますが、正直なところ...一体何が間違っていますstr_replaceか? あなたが使用しているように、サーバー<->クライアントデータに最適です:urlencodejson_encode

var someVal = JSON.parse(<?= json_encode(array('data' => $someVar));?>).data;

エスケープが必要なすべての文字はエスケープされます...仕事は完了し、「ネイティブ」PHP関数を使用します。

更新:
以下のコメントが示すように、これはおそらくスコープの問題による PHP エラーです。クラスで変数を宣言する代わりに、プロパティを宣言する必要があります。

class Foo
{
    public $theProperty = null;
    public function __construct($argument = null)
    {
        $this->theProperty = $argument;//assign a variable, passed to a method to a property
        $someVar = 123;//this variable, along with $argument is GC'ed when this method returns
    }
}
//end of class
$instance = new Foo('Value of property');
echo $instance->theProperty;//echoes "value of property"
$anotherInstance = new Foo();//use default value
if ($anotherInstance->theProperty === null)
{//is true
    echo 'the property is null, default value';
    $anotherInstance->theProperty = 'Change a property';
}

これは、基本的にどのように機能するかです。ビュー スクリプトをどのように使用しているかわかりません。そのため、以下のコードはあなたのケースでは機能しない可能性があります (コントローラーで Zend Framework で実行できることです)。

public function someAction()
{
    $instance = new Foo('Foobar');
    $this->view->passedInstance = $instance;//pass the instance to the view
}

次に、ビュースクリプトで次のようにします。

var someVal = JSON.parse('<?= json_encode(array('data' => $this->passedInstance->someProperty)); ?>').data;

しかし、私の答えがあなたのケースで機能するためには、ビューをどのようにレンダリングしているかを確認する必要があります... フレームワークを使用していますか? 従来の MVC パターンを使用していますか、それともビュー スクリプトを使用していますincludeか?

于 2013-01-24T16:11:05.317 に答える