我有一個頁面,我想在地圖上顯示一些點。我有小模板(比如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