我如何在symfony 1.4中使用ajax(表单字段填充)

时间:2011-06-21 08:17:13

标签: json jquery symfony-1.4

我是symfony框架的新手。我正在尝试根据city_id选择框中的选择填充states表单字段。

我在名为getStates()

actions.class.php文件中创建了一个新方法

这里是代码。

public function executeGetCities(sfWebRequest $request)
{
    $this->forwardUnless($query = $request->getParameter('stateId'), 'users', 'index');

    $this->states = Doctrine_Query::create()
                    ->from('States s')
                    ->where('s.id = ?', array($request->getParameter('stateId')));

    if($request->isXmlHttpRequest())
    {
        echo json_encode($this->states);
    }
}

关于状态的更改事件,javascript代码如下:

$('#users_states').change(function(){
            populateSelectBox('users_city_id', 'get', '<?php echo url_for('states/getCities/'); ?>', {stateId:$(this).val()})
        });

populateSelectBox函数只是遍历json并在city_id表单字段中填充它。

但上述请求会出错,并说视图getcities不存在。

请帮我这样做。

1 个答案:

答案 0 :(得分:1)

您是否有特殊路线在路线中处理此操作? 如果使用默认路由,则必须首先创建一个特殊路由,并为stateId指定特定参数。 您可以在浏览器中手动测试生成的URL(您必须在操作中禁用ajax测试)。

你的学说请求没有执行!你可以使用fetchArray返回一个数组:

public function executeGetCities(sfWebRequest $request)
{
    //$this->forwardUnless($query = $request->getParameter('stateId'), 'users', 'index');

    $this->states = Doctrine_Query::create()
                    ->from('States s')
                    ->where('s.id = ?', array($request->getParameter('stateId')))->fetchArray();

    //if($request->isXmlHttpRequest())
    //{
        echo json_encode($this->states);
    //}
}