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 Autocomplete 处理“无结果”

jQuery UI 实例 - 自动完成(Autocomplete)

未捕获的 TypeError: $(...).autocomplete 不是 JQuery-UI 中的函数

如果没有可用数据,rails3-jquery-autocomplete 清除字段