嗨所以我的代码类似于jquery-ui 1.11:
jQuery ->
$('#search_terms').autocomplete
source: (request, response) ->
$.ajax
url: '/list.json'
dataType: "json"
data: { term: request.term }
success: (data) ->
response: $.map(data, (v, i) ->
label: i
value: v.toString()
)
如果我console.log $.map(data, (v, i)...
我在Firebug控制台窗口中收到此输出:[Object {label="someX", value="someY"}, Object....]
如何修复$.map
代码以获取jquery ui自动完成的正确JSON格式?
在JSON.stringify
代码周围添加$.map
会产生如下内容:
[{"label":"Label1","value":"5"}, ...]
似乎应该有效,但却没有。不知道是不是因为我启用了Twitter Bootstrap 3 ...
答案 0 :(得分:0)
jQuery自动完成小部件需要return an array of strings to offer to the user。如果您希望将值提供给用户,您可以像这样转换数组:
$.map(data, (v, k) ->
v.toString()
)
或者 - 似乎更有可能 - 如果您希望将标签提供给用户,您可以像这样转换数组:
$.map(data, (v, k) ->
k
)
相当于data.keys()
。
您也必须调用响应函数;我认为你的CoffeeScript返回一个带有一个键response
的对象。所以你的整体CoffeeScript应该是这样的:
jQuery ->
$('#search_terms').autocomplete
source: (request, response) ->
$.ajax
url: '/list.json'
dataType: "json"
data: { term: request.term }
success: (data) ->
response data.keys()
error: response []
(我已经添加了error
回调,因为文档说you must call response
even in the case of an error。)
最后,您可以简化此操作。如果您修改服务器以使list.json?term=search
之类的请求返回JSON数组字符串,那么您的自动完成功能可能非常简单:
jQuery ->
$('#search_terms').autocomplete
source: "/list.json"