如何将变量从zend框架传递到javascript/jquery?

如何将变量从zend框架传递到javascript/jquery?,javascript,jquery,ajax,zend-framework,Javascript,Jquery,Ajax,Zend Framework,如何将变量从zf传递到javascript/jquery 谢谢 在你看来: <script type="text/javascript"> var foo = <?=Zend_Json::encode($this->foo)?>; </script> 在你看来: <script type="text/javascript"> var foo = <?=Zend_Json::encode($this->foo)?>; <

如何将变量从zf传递到javascript/jquery

谢谢

在你看来:

<script type="text/javascript">
var foo = <?=Zend_Json::encode($this->foo)?>;
</script>
在你看来:

<script type="text/javascript">
var foo = <?=Zend_Json::encode($this->foo)?>;
</script>
这需要将echo$This->headScript添加到视图或布局脚本中


这需要将echo$This->headScript添加到视图或布局脚本中。

您可以使用headScript视图助手动态创建javascript 它具有如下功能:

<?php $this->headScript()->captureStart() ?>
var action = '<?php echo $this->baseUrl ?>';
$('foo_form').action = action;
<?php $this->headScript()->captureEnd() ?>

来源:

您可以使用Headscript视图帮助器动态创建javascript 它具有如下功能:

<?php $this->headScript()->captureStart() ?>
var action = '<?php echo $this->baseUrl ?>';
$('foo_form').action = action;
<?php $this->headScript()->captureEnd() ?>

来源:

我知道这将是一个迟来的答案,我使用了@chelmertz解决方案,但目前我对此有一些问题。我在一个复杂的UI应用程序中工作,在我的外部javascript文件中需要很多php数组和其他json对象。我的js脚本并不是一成不变的,所以每次如果我需要从php到javascript的一些东西,我都必须检查所有的东西,比如

我是否将appendScript放置在正确的位置,以便some.js脚本找到定义的变量

2生成的字符串将传递给appendScript,该字符串是有效的js语法。 还有更多

我还专门为Zend框架开发了另一种方法。 我在这里写了一篇详细的教程

总结:

1创建一个包含在标记中的公共视图文件,该文件检查属性数组,比如说$this->jsVars视图对象,并定义js变量 此视图文件的代码

<script>
<?php if(!empty($this->jsVars)){ ?>

<?php
foreach($this->jsVars as $var) {
if($var['type'] == 'json'){
?>
var <?php echo $var['name']?> = JSON.parse('<?php echo $var['value'];?>');
<?php } elseif($var['type'] == 'text'){ ?>
var <?php echo $var['name']?> = "<?php echo $var['value'];?>";
<?php }else{?>
var <?php echo $var['name']?> = <?php echo $var['value'];?>;
<?php
}}?>

<?php }?>

</script>
3向$this->view->jsVars添加php数组或json对象,如

//在你的行动方法中

$test = array('mango','orange','banana');
$this->view->jsVars[] = array('name'=>'test','type'=>'json','value'=>json_encode($test));

现在,测试将在您的任何脚本文件中定义为一个数组,无论您在什么情况下包含js文件。

我知道这将是一个迟来的答案,我使用了@chelmertz解决方案,但目前我遇到了一些问题。我在一个复杂的UI应用程序中工作,在我的外部javascript文件中需要很多php数组和其他json对象。我的js脚本并不是一成不变的,所以每次如果我需要从php到javascript的一些东西,我都必须检查所有的东西,比如

我是否将appendScript放置在正确的位置,以便some.js脚本找到定义的变量

2生成的字符串将传递给appendScript,该字符串是有效的js语法。 还有更多

我还专门为Zend框架开发了另一种方法。 我在这里写了一篇详细的教程

总结:

1创建一个包含在标记中的公共视图文件,该文件检查属性数组,比如说$this->jsVars视图对象,并定义js变量 此视图文件的代码

<script>
<?php if(!empty($this->jsVars)){ ?>

<?php
foreach($this->jsVars as $var) {
if($var['type'] == 'json'){
?>
var <?php echo $var['name']?> = JSON.parse('<?php echo $var['value'];?>');
<?php } elseif($var['type'] == 'text'){ ?>
var <?php echo $var['name']?> = "<?php echo $var['value'];?>";
<?php }else{?>
var <?php echo $var['name']?> = <?php echo $var['value'];?>;
<?php
}}?>

<?php }?>

</script>
3向$this->view->jsVars添加php数组或json对象,如

//在你的行动方法中

$test = array('mango','orange','banana');
$this->view->jsVars[] = array('name'=>'test','type'=>'json','value'=>json_encode($test));

现在,测试将在您的任何脚本文件中定义为数组,无论您在什么情况下包含js文件。

我知道这是一个老问题,但我相信其他人可以从中受益:

您可以像这样使用控制器并将变量传递给JavaScript:

$this->view->headScript()->appendVar('dogName', 'Rocky')
                         ->appendVar('dogPictures', $pictures);

为了方便起见,prependVar、setVar和offsetSetVar也可以使用。

我知道这是一个老问题,但我相信其他人可以从中受益:

您可以像这样使用控制器并将变量传递给JavaScript:

$this->view->headScript()->appendVar('dogName', 'Rocky')
                         ->appendVar('dogPictures', $pictures);

为了方便起见,prependVar、setVar和offsetSetVar也可以使用。

我来到这里,尝试了所有答案,但没有一个对我有帮助,所以我最后做的是下一步,可能为时已晚,但可能对其他人有帮助:

在要将变量传递给js的控制器内:

public function someAction()
{
    $var = array(
        'test' => 'phpVar',
        'test2' => 'phpVar2'
    );

    $this->view->jsVar = $var;
}
现在在布局中,在head标记内部,在加载任何其他脚本之前,请执行以下操作:

$this->headScript()->appendScript('var phpVars='.json_encode($this->jsVar));
最后,在js文件中,您将能够访问变量phpVars:

console.log(phpVars);
您可以在控制台中看到:

Object {test: "phpVar", test2: "phpVar2"}
能够访问每个变量,如phpVars.test和phpVars.test2


现在,您可以随时将变量从控制器传递到js文件。

我来到这里,尝试了所有答案,但没有一个答案对我有帮助,所以我最后做的是下一步,可能为时已晚,但可能对其他人有帮助:

在要将变量传递给js的控制器内:

public function someAction()
{
    $var = array(
        'test' => 'phpVar',
        'test2' => 'phpVar2'
    );

    $this->view->jsVar = $var;
}
现在在布局中,在head标记内部,在加载任何其他脚本之前,请执行以下操作:

$this->headScript()->appendScript('var phpVars='.json_encode($this->jsVar));
最后,在js文件中,您将能够访问变量phpVars:

console.log(phpVars);
您可以在控制台中看到:

Object {test: "phpVar", test2: "phpVar2"}
能够访问每个变量,如phpVars.test和phpVars.test2


现在,您可以随时将变量从控制器传递到js文件。

除非您改进问题以解决特定问题,这是以与相同的方式完成的,jQuery也有许多视图帮助程序:在什么情况下,您希望将变量传递给javascript函数?请始终记住:为什么需要使用php?除非您改进问题以解决特定问题,否则这是以与相同的方式完成的

jQuery还有许多视图帮助程序:在什么情况下,您希望将变量传递给javascript函数?请始终记住:为什么需要php来实现此目的?我希望将变量传递给js文件您可以在js文件中使用此变量,只要在包含js文件之前执行此代码,我就会提取变量以保持js干净。在控制器中:$this->view->headScript->appendScript'var_foo='。$foo;和js:var foo=_foo。我想将变量传递给js文件。您可以在js文件中使用此变量,只要在包含js文件之前执行此代码,我将提取变量以保持js干净。在控制器中:$this->view->headScript->appendScript'var_foo='。$foo;和js:var foo=_foo。如何在js文件中获取$message,当我尝试在js文件中使用$message时,我得到了一个错误未定义的变量。您不应该在js中使用$message,它是一个PHP变量,在插入普通js之前由PHP解析。如何在js文件中获取$message,当我尝试在js文件中的$message中使用$message时,我得到了一个错误未定义变量。你不应该在js中使用$message,它是一个PHP变量,在插入到纯js中之前会被PHP解析。嘿,Bogdan,我正试图使用它,但我得到了致命错误:在第170行的/var/www/xxxx/zf2/2.2.2/library/Zend/ServiceManager/AbstractPluginManager.php中找不到类“Application\View\Helper\HeadScript”。我觉得这是一个设置问题,但在我的应用程序模块类的getViewHelperConfig中,HeadScript指向Application\View\Helper\HeadScript。此外,我还必须将声明更改为类应用程序_View _Helper(HeadScript extensed HeadScript),以消除找不到Zend\View\Helper\HeadScript的错误。一个新手,不知道下一步该怎么做。最后使用autoload_classmap.php加载了它,但后来它说prependVar方法不存在。那我就放弃了。只需使用在我的视图中声明javascript变量的方法,然后附加javascript文件。很抱歉给您添麻烦,@mutatron。此类与Zend Framework 2不兼容。对于仍然使用Zend Framework 1的人,我已经添加了。嘿,Bogdan,我正在尝试使用它,但我得到了致命错误:在第170行的/var/www/xxxx/zf2/2.2.2/library/Zend/ServiceManager/AbstractPluginManager.php中找不到类“Application\View\Helper\HeadScript”。我觉得这是一个设置问题,但在我的应用程序模块类的getViewHelperConfig中,HeadScript指向Application\View\Helper\HeadScript。此外,我还必须将声明更改为类应用程序_View _Helper(HeadScript extensed HeadScript),以消除找不到Zend\View\Helper\HeadScript的错误。一个新手,不知道下一步该怎么做。最后使用autoload_classmap.php加载了它,但后来它说prependVar方法不存在。那我就放弃了。只需使用在我的视图中声明javascript变量的方法,然后附加javascript文件。很抱歉给您添麻烦,@mutatron。此类与Zend Framework 2不兼容。对于仍然使用Zend Framework 1的人,我已经添加了。有人知道如何向使用该框架创建的脚本添加属性吗?根据我可以从文档中得到的信息,它将类似于以下内容,但它似乎无法呈现。。。还尝试了$this->inlineScript->captureStartPREPEND,'text/javascript',[nonce=>r@nd0m]啊。似乎定义captureStart参数可能只存在于Headscript中。这太傻了。有人知道如何将属性添加到使用它创建的脚本中吗?根据我可以从文档中得到的信息,它将类似于以下内容,但它似乎无法呈现。。。还尝试了$this->inlineScript->captureStartPREPEND,'text/javascript',[nonce=>r@nd0m]啊。似乎定义captureStart参数可能只存在于Headscript中。那太傻了。