CakePHP:如何将值传递到JavaScript文件中?

3
我有一些JavaScript代码需要包含在视图中,我使用了inkedmn在此线程中提供的方法:adding-page-specific-javascript-to-each-view-in-cakephp 因此,现在我的视图中有以下代码:
$this->set('jsIncludes',array('google'));   // this will link to /js/google.js

但我需要将一些值从视图传递到JavaScript文件中,我不确定如何实现这一点。

更新:我猜一个选项是在php文件中回显这些值,用div标签括起来,然后在JavaScript代码中使用getElementById()。

4个回答

10

你应该能够直接将一个带有所需数据的<script>标签注入到HTML中:

<script type="text/javascript">
var mynum = <?php echo intval($num); ?>;
var mystring = "<?php echo addslashes($string); ?>";
var myarray = <?php echo json_encode(array("one" => 1, "two" => 2)); ?>;
</script>

其他地方的JavaScript应该能够使用这些变量。

注意:如果使用此数据的代码在页面上先运行,它们显然还无法看到这些变量。如果是这种情况,请确保先加载数据,或者您可以使用setTimeout()或document.onready事件延迟代码运行,直到页面完全加载。


谢谢您的输入。我有一个额外的要求,即用户在呈现的HTML页面源代码中看不到这些变量的值。这些值有一定的安全性。您有任何想法如何实现这个要求吗? - akskap
@akskap 我认为这是不可能的;最多你可以混淆数据并使其更难读取。如果用户足够决心,就没有办法向浏览器提供用户无法看到的数据。任何需要100%保密的内容必须完全存储在服务器端。 - Luke Dennis

1

你有一些可以自动运行的代码吗?你可以将其包裹在一个函数内,并将必要的参数传递给该函数。

例如,假设你目前在 my-script.js 文件中拥有以下代码:

window.onload = function() {
  alert('My favorite fruits are apples, and my favorite color is red.');
}

将其包装在一个类似这样的函数中:
function initialize(args) {
  window.onload = function() {
    alert('My favorite fruits are ' + args.fruit +
     ', and my favorite color is ' + args.color + '.');
    }
  }

然后,在my-script.js加载完成后,使用PHP输出一个<script>元素,并调用该函数。以下是一个示例输出:
<script>
  initialize({fruit: 'apples', color: 'red'});
</script>

0
$this->Js->set('varname',$value);

来自JS文件

var myvar = window.app.varname;

0

以下是步骤:

1)在AppController.php中包含js助手

public $helpers = array('Js');

2) 现在在ctp文件中声明js变量,就像这样:

$state = 'rajasthan';
$this->Js->set('state_name',$state);
echo $this->Js->writeBuffer(array('onDomReady' => false));

3) 现在在js文件中使用这个js变量"state_name" 像这样:

console.log(window.app.state_name);
var state = window.app.state_name;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接