jQuery Autocomplete 无法通过 AJAX 工作
Posted
技术标签:
【中文标题】jQuery Autocomplete 无法通过 AJAX 工作【英文标题】:jQuery Autocomplete not working via AJAX 【发布时间】:2019-01-24 08:16:04 【问题描述】:我已经从 https://github.com/devbridge/jQuery-Autocomplete 合并了 jQuery Autocomplete 库
在服务器 (Laravel) 上,我将响应格式化如下:
Route::get('/api/v1/products', function()
foreach(App\Product::all() as $product)
$products[] = [
'value' => $product->name,
'data' => $product->id
];
return response()->json($products)->header("Access-Control-Allow-Origin", "*");
);
这会产生以下响应:
[
"value": "Test Product 1",
"data": 1
,
"value": "Skateboard",
"data": 23
,
"value": "Surfboard",
"data": 24
]
为了让库使用数据,我使用以下代码:
jQuery('#product-search').autocomplete(
serviceUrl: '/api/v1/products',
onSelect: function (suggestion)
alert('You selected: ' + suggestion.value + ', ' + suggestion.data);
);
输入后,控制台返回此错误:
我已经添加了 Access-Control-Allow-Origin 标头以确保没有 CORS 错误。除此之外,我不确定为什么会收到此错误。
我还确保 json 响应的格式正确。
我错过了什么?
【问题讨论】:
html 是动态生成的,我的意思是通过 ajax 响应? @VasimVanzara 我不明白你的意思。 你必须确定控制是否真的存在? 对于 Access-Control-Allow-Origin,您可以使用 this package 控制台消息是什么意思? 【参考方案1】:错误在于您返回响应的方式。您只需返回一个包含建议的数组,但是,如果您查看 source code,插件需要一个名为 suggestions
的对象,如下所示:
"suggestions": ["value": "xxx", data: 1, "value": "xxx", data: 1 /* ... */]
所以你必须改变你的路线:
return response()->json($products)->header("Access-Control-Allow-Origin", "*");
到:
return response()->json(['suggestions' => $products])->header("Access-Control-Allow-Origin", "*");
【讨论】:
以上是关于jQuery Autocomplete 无法通过 AJAX 工作的主要内容,如果未能解决你的问题,请参考以下文章
通过 rails3-jquery-autocomplete 使用多个输入字段
使用 Jquery Autocomplete 处理“无结果”
jQuery UI 实例 - 自动完成(Autocomplete)