如何将变量从zf传递给javascript / jquery?
感谢
答案 0 :(得分:5)
您可以使用Headscript View Helper动态创建JavaScript 它的功能如下:
<?php $this->headScript()->captureStart() ?>
var action = '<?php echo $this->baseUrl ?>';
$('foo_form').action = action;
<?php $this->headScript()->captureEnd() ?>
答案 1 :(得分:2)
<?php
$this->view->foo = $foo;
?>
在您看来:
<script type="text/javascript">
var foo = <?=Zend_Json::encode($this->foo)?>;
</script>
答案 2 :(得分:2)
我知道这是一个老问题,但我相信其他人可以从中受益:
您可以使用this extended HeadScript class并从控制器将变量传递给JavaScript,如下所示:
$this->view->headScript()->appendVar('dogName', 'Rocky')
->appendVar('dogPictures', $pictures);
prependVar
,setVar
和offsetSetVar
也是为了方便起见。
答案 3 :(得分:1)
<?php
class SomeController extends Zend_Controller_Action {
public function indexAction() {
// a file
$this->view->headScript()->appendFile('yourJsFile.js');
// inline script
$message = 'hello!';
$this->view->headScript()->appendScript("jQuery(function(){alert('$message');});");
}
}
这需要您将echo $this->headScript()
添加到视图或布局脚本中。
答案 4 :(得分:1)
我知道这将是迟到的答案,而且我使用过@chelmertz解决方案,但目前我遇到了一些问题。我在一个复杂的UI应用程序中工作,我在外部javascript文件中需要大量的php数组和其他json对象。并且我的js脚本的包含并不统一,所以每次如果我需要从php到javascript的一些东西,我必须检查整个事情,如....
1)我将appendScript()放在正确的位置,以便some.js脚本找到我定义的变量
2)生成的字符串将被传递给appendScript()是一个有效的js语法。 还有更多...
我还有另一种专门为Zend Framework开发的方法。 我在这里写了详细的教程 http://rupeshpatel.wordpress.com/2012/09/21/add-json-objects-arrays-and-variables-from-php-to-javascript/
<强>摘要强>
1)创建一个包含在tag中的公共视图文件,它检查一个属性(一个数组),让我们说$ this-&gt; 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>
2)在echo $this->headScript()
之前在布局文件中渲染此视图,以便所有外部脚本都具有那些js变量
<?php
echo $this->render('index/include_js_vars.phtml'); // rendering view
$this->headScript()->prependFile(JS_BASE_URL.'/jquery-1.7.2.min.js');
$this->headScript()->appendFile(JS_BASE_URL.'/jquery.blockUI.js');
$this->headScript()->appendFile(JS_BASE_URL.'/commonJS.js');
$this->headScript()->appendFile('http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js');
echo $this->headScript();
?>
3)将php数组或json对象附加到$ this-&gt; view-&gt; jsVars like
//在您的操作方法中
$test = array('mango','orange','banana');
$this->view->jsVars[] = array('name'=>'test','type'=>'json','value'=>json_encode($test));
现在test
将在您的任何脚本文件中定义为数组,无论您在哪个实例中包含了js文件。
答案 5 :(得分:0)
我来到这里并尝试了所有的答案,但他们没有帮助我,所以我最后做的是下一个(也许它太晚了,但可能对其他人有帮助):
在控制器内部,您要将变量传递给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文件。