Zend Jquery自动填充从数据库填充

时间:2011-07-22 14:45:55

标签: json zend-framework jquery-autocomplete

您好我正在尝试使用Zend Jquery实现自动填充字段。我按照教程从数组中获取数据,并扩展了代码以访问mysql表中的数据。

IndexController.php

$this->view->autocompleteElement = new ZendX_JQuery_Form_Element_AutoComplete('ac');
    $this->view->autocompleteElement->setLabel('Autocomplete');
    $this->view->autocompleteElement->setJQueryParam('source', '/index/city');

这会调用cityAction()

public function cityAction()
{
    $results = Application_Model_City::search($this->_getParam('term'));
    $this->_helper->json(array_values($results));        
}

然后我打电话给模范城市

public static function search($term)
{
   $region = new Application_Model_DbTable_Regions();

   $results = $region->getRegion($term);

   return $results;

}

最后是Regions db模型

public function getRegion($term)
{

    $select = $this->select()->from($this,'City')
                                 ->where('City LIKE ? ',$term.'%');


    return $this->fetchAll($select)->toArray();

}

现在,当我进入自动填充字段时,它会显示结果但是作为UNDEFINED,我认为它可以按照我将数据发送回json助手的方式进行操作。

我使用了firebug,我可以看到数据是按以下格式提取的。

[{ “城市”: “伦敦”},{ “城市”: “伦敦德里”},{ “城市”: “Longfield”},{ “城市”: “Longhope(朗霍普)”},{ “城市”:” Longniddry“}]

我认为这种格式不正确,请问之前处理过这个问题的机构吗?

干杯

Ĵ

2 个答案:

答案 0 :(得分:3)

ZendX_JQuery_Form_Element_AutoComplete元素是AutoComplete View Helper的代理,它是jQuery UI Autocomplete小部件的代理。

如果您阅读jQuery UI Autocomplete页面上的概述,请注意:

  

本地数据可以是一个简单的字符串数组,或包含数组中每个项目的对象,带有标签或值属性或两者都。 label属性显示在建议菜单中。用户从菜单中选择了某些内容后,该值将插入到input元素中。如果仅指定了一个属性,则它将用于两者,例如。如果仅提供value-properties,则该值也将用作标签。

     

使用String时,Autocomplete插件希望该字符串指向将返回JSON数据的URL资源。它可以位于同一主机上,也可以位于不同的主机上(必须提供JSONP)。请求参数“term”将添加到该URL。 数据本身可以采用与上述本地数据相同的格式

因此,您返回自动完成的JSON应该更像是:

[{"label":"London","value":"London"},{"label":"Londonderry","value":"Londonderry"},{"label":"Longfield","value":"Longfield"}]
祝你好运!

答案 1 :(得分:0)

修复了几小时疼痛后的问题!

我修改了以下代码,用于访问数据

public function getRegion($term)

{

$select = $this->select()->from($this,'City')
                             ->where('City LIKE ? ',$term.'%');


return $this->fetchAll($select)->toArray();

}

我添加了一行SQL City AS Value

public function getRegion($term)

{

$select = $this->select()->from($this,'City AS value')
                             ->where('City LIKE ? ',$term.'%');


return $this->fetchAll($select)->toArray();

}

这似乎有效!

干杯

Ĵ