【问题标题】:jQuery Autocomplete not working via AJAXjQuery Autocomplete 无法通过 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
  • 控制台消息是什么意思?

标签: jquery json ajax laravel api


【解决方案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", "*");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-28
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    相关资源
    最近更新 更多