如何将关联数组从smarty模板传递给jquery

时间:2013-03-10 09:24:11

标签: php jquery smarty

我已将 selection.php 中的两个数组分配给smarty,就像这样

$country = array(
         '1' => 'Japan',
         '2' => 'Australia',
         '3' => 'India'
            );      
$city = array(
            '1' => array(
                 '10' => 'Tokyo',
                 '11' => 'Osaka'
               ),
        '2' => array(
                 '20' => 'Sydney',
                 '21' => 'Melbourne'
               ),
        '3' => array(
                 '30' => 'Mumbai',
                 '31' => 'Delhi'
               )
        );      
$smarty->assign('country_select',$country);
$smarty->assign('city_select',$city);
$smarty->display('selection.tpl');

selection.tpl 中的代码如下所示。

<div>{html_options id='country_select' options=$country_select}</div>
<div>{html_options id='city_select' options=$city_select}</div>

现在我要做的是,编写一个jQuery函数,当我在country_select下拉列表中选择一个国家/地区时,city_select下拉列表中的项目将根据国家/地区选择进行更改。意味着,如果我在country_select下拉列表中选择“澳大利亚”,则在城市选择下拉列表中除“悉尼”和“墨尔本”之外的其他选项将被删除。

你能帮我解释一下jQuery代码是怎样的。我无法将$ city_select数组传递给jQuery。

2 个答案:

答案 0 :(得分:0)

$country = array('1' => 'Japan', '2' => 'Australia', '3' => 'India');    
$city = array(
    '1' => array('10' => 'Tokyo', '11' => 'Osaka'),
    '2' => array('20' => 'Sydney', '21' => 'Melbourne'),
    '3' => array('30' => 'Mumbai', '31' => 'Delhi')
);
$data = array('countries' => $country, 'cities' => $city);

echo json_encode($data);

使用json_encode将输出回显为JSON,结果应如下所示:

{"countries":{"1":"Japan","2":"Australia","3":"India"},"cities":{"1":{"10":"Tokyo","11":"Osaka"},"2":{"20":"Sydney","21":"Melbourne"},"3":{"30":"Mumbai","31":"Delhi"}}}

然后你应该使用jQuery ajax来获取PHP并使用JSON进行通信

$.get("selection.php", function(result) {
    //code here
}, "json");

我在Fiddle上写了一个示例代码,javascript应该放在jQuery AJAX的中间。 http://jsfiddle.net/sing0920/X3dvG/

希望得到这个帮助。

哎呀,我发现我完全忽略了“聪明”,对不起。但仍然希望这可以帮助你。

答案 1 :(得分:0)

如上所述,您可以使用带有JSON数据序列化的ajax请求。另一方面,您可以省略ajax请求,并使用$.data函数,将data-<smth>属性添加到某个特定元素或正文。此datat元素的值可能类似于:     BASE64_ENCODE(json_encode($数据)) 然后在jquery脚本中使用$('<elem>').data('<smth>')并使用http://ntt.cc/2008/01/19/base64-encoder-decoder-with-javascript.html和JSON.parse等解码它。