我有一个页面,我想在地图上显示一些点。我有小模板(比如Smarty,但更轻),模板中有变量$ points,它由我需要的点的坐标组成。我需要将它们传递给javascript(因为只有javascript可以使用点呈现该地图)。如何将变量从php模板传递给javascript
我有3个变种。你能告诉,什么是最好的?
1号方式:(模板中插入JavaScript的标签和全局变量)
tpl.php文件:
<script>
MAP_POINTS = <?php echo json_encode($this->points); ?>;
</script>
js文件
function renderMap(){
var points = MAP_POINTS; // using global. Is it really bad? or who cares? =))
}
第二方式:(通过HTML元素传递变量)
tpl.php.file
<input type="hidden"
value="<?php echo json_encode($this->points); ?>"
id="map_points_container">
js文件
function renderMap(){
// without globals, but needed to be parsed on local side
var points = $.parseJSON ($("#map_points_container").val());
}
第三方式:(AJAX向)
我根本没有从模板文件中传递$this->points
。我有一个处理我所有的AJAX请求另一个PHP文件:
Ajaxing.php
function get_map_points($params){
// some operations
return json_encode ($map_points);
}
而不是在本地端我有这样的事情:
js文件
$.post ('ajaxing.php', params,
function(points){
renderMap(points);
}, 'json');
第三种方式很平常,但如果我已经将一些值从模板传递到本地页面,那么我也可以传递和映射点。事实上,我不需要再提出只有这个地图点的要求(这就是为什么我不喜欢第三种方式)
但是可能你可以告诉我另一种方式吗?更好的方法?
我选用的方式:
很少讲话1号路。我所有的“地图绘制”的代码是在另一个文件中,它就像:
$(function(){
MAP_APP = {};
MAP_APP.some_prop = null; // some properties
MAP_APP.some_method = function(){}; // some methods
});
所以在模板文件中我只有致以MAP_APP对象:
<script>
MAP_APP.points = <?php echo json_encode($this->points); ?>;
</script>
是,全局变量。但它就像整个应用程序的命名空间。
感谢大家。
**最好**根据什么标准? – 2011-06-07 05:23:28
主要标准是速度和生产力。第二个标准是代码的“正确性”。我不希望我的代码被称为'怪异'或'异常'或其他东西;) – 2011-06-07 05:26:30
以下是一种方式:[Passing php varialbe](http://stackoverflow.com/questions/6000871/passing-a-php -variable-in-external-js-file/6000973#6000973) – Ibu 2011-06-07 05:28:56