2010-12-09 66 views
0

我正在尝试使用jQuery UI自动完成,并且似乎无法将两个和两个放在一起。jQuery UI自动完成从变量解析数据

我有一个用于所有json数据请求的php页面。我使用switch语句确定发出请求时要触发哪个函数,使用post将该数据传递给php页面,即; “自动完成”传递给页面,然后告诉它从我的数据库中检索特定的表格,然后将其编码成json。

数据格式如下:[“1”:“Email”,“2”:“Hosting”]等等。 json数据中有可变数量的项目,但始终使用key =>值对。我需要该键为该字段的值以及要在自动填充列表中显示的值。 (如果需要,数据顺序可以颠倒,这只是一个例子)。

我不需要或希望自动完成功能每次有人键入框中的某些字符时都会触发此数据库,所以我试图仅生成该字段所需的选项的静态列表,并将它们分配给用于autocomplete()的javascript对象。

function myFunction (DataType, ID) { 
    $j.ajax({ 
     type: 'POST', 
     cache: 'false', 
     url: 'json.php', 
     data: {jsonFunction:DataType}, 
     success: function(data){ 
       $j(ID).autocomplete({ source: [data] }); 
      } 
     }); 
}; 

的功能,然后调用我的document.ready()函数:

myFunction ("AutoComplete", "input#Type"); 

所以我需要的是能够从一个Ajax请求自动完成可以作为使用创建一个变量的选项。我只是不知道如何让这个工作!我尝试了几种不同的方法无济于事,包括通过我在这里和其他地方看到的几个例子解析数据。 ui自动完成的文档声明,您可以使用具有键值对的数组,但不管格式如何,它只是不喜欢我的数据。

我很想念一些明显的东西,我确定。

+0

更新,这是从未解决。我放弃了使用自动完成的jquery-ui作品,因为我无法让它正常工作。我改为使用编程生成的选择框。 :( – Garrett 2010-12-29 16:43:27

回答

0

嗯,这是非常糟糕的做法,但你可以使用eval()。只需使用JavaScript的快速对象符号(括号如jQuery使用)

更好的解决方案 - 缓存数据库(假设)查询

+0

我会考虑缓存我的数据库查询。这可能会诀窍。我想尽可能多地删除我的服务器上的不必要的负载,但仍然提供动态功能,例如此自动完成。 – Garrett 2010-12-10 15:35:31

+0

它更有意义缓存您的而不是试图用JavaScript来做一些事情,SQL是一种快速的语言(命名另一种语言,可以毫秒搜索1M记录:))。我不知道你的服务器模型,但看看Doctrine。它会自动为您优化查询和缓存。这是我经常使用的PHP ORM – sethvargo 2010-12-10 18:24:41