【问题标题】:How to use jQuery-Autocomplete with a json returned object如何使用带有 json 返回对象的 jQuery-Autocomplete
【发布时间】:2020-05-15 06:11:32
【问题描述】:

我正在尝试在文本输入字段 (documentation here) 上使用 jQuery-Autocomplete 库。 因此我使用这个 Ajax 查找从数据库中获取数据:

// terminal.js

$(document).ready(function() {
    $.ajax("getStocksAvailable/", {
        method: "GET",
        async: "True",
        dataType: "json",
        success: function (response) {
            console.log(response);
            var myDataInAutocompleteFormat = $.map(response, function (response) {
                return {value: response.fields.description, data: response.pk};
            });

            $("#autocomplete").autocomplete({
                source: myDataInAutocompleteFormat,
                lookup: myDataInAutocompleteFormat,
                onSelect: function (suggestion) {
                    alert("You selected: " + suggestion.value + ", " + suggestion.data);
                }
            });
        }
    });
})

以这种格式返回response json:

[0 … 99]
0:
 fields: {description: "DP WORLD"}
     description: "DP WORLD"
 model: "feeder.stocksavailablemodel"
 pk: 17969
__proto__: Object
1: {model: "feeder.stocksavailablemodel", pk: 17970, fields: {…}}
2: {model: "feeder.stocksavailablemodel", pk: 17971, fields: {…}}

我想让 jQuery 使用 json 中的所有 description 值自动完成输入字段。

// html

<link rel="stylesheet" type="text/css"
    href="https://cdnjs.cloudflare.com/ajax/libs/jquery-autocomplete/1.0.7/jquery.auto-complete.min.css">

<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css">

<script src="https://code.jquery.com/jquery-3.5.1.min.js"
    integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-autocomplete/1.0.7/jquery.auto-complete.min.js"></script>
<script src="{% static 'js/terminal.js' %}"></script>

错误

Uncaught TypeError: $(...).autocomplete is not a function
    at Object.success (terminal.js:30)
    at c (VM1560 jquery.min.js:2)
    at Object.fireWith [as resolveWith] (VM1560 jquery.min.js:2)
    at l (VM1560 jquery.min.js:2)
    at XMLHttpRequest.<anonymous> (VM1560 jquery.min.js:2)

我假设自动完成器不喜欢 json 的格式。但我不知道如何使它符合它的要求,以便它能够处理数据。

Json 作为屏幕截图返回:

【问题讨论】:

    标签: javascript jquery jquery-ui-autocomplete


    【解决方案1】:

    根据文档自动完成仅接受两种格式的数据,值数据或仅值:

    {
        // Query is not required as of version 1.2.5
        "query": "Unit",
        "suggestions": [
            { "value": "United Arab Emirates", "data": "AE" },
            { "value": "United Kingdom",       "data": "UK" },
            { "value": "United States",        "data": "US" }
        ]
    }
    
    {
        "query": "Unit",
        "suggestions": ["United Arab Emirates", "United Kingdom", "United States"]
    }
    

    然后您需要映射您的对象以使其具有所需的格式。您可以使用 transformResult 函数来管理来自 Ajax 调用的数据

    $('#autocomplete').autocomplete({
        paramName: 'searchString',
        transformResult: function(response) {
            return {
                suggestions: $.map(response.myData, function(dataItem) {
                    return { value: dataItem.valueField, data: dataItem.dataField };
                })
            };
        }
    });
    

    使用本地查找(无 ajax)查看此示例: https://stackblitz.com/edit/js-mbxtd8

    【讨论】:

    • 感谢您的回复。我试图相应地适应并更新我的问题。现在看来自动完成功能无法正常工作,嗯
    • @Phanti '.autocomplete is not a function' 表示对 JQuery/JQuery UI/JQuery Autocomplete 的引用丢失或没有很好地引用,请查看我的示例的 index.html。
    • 这很奇怪,我确实复制/粘贴了您的参考资料,但仍然无法识别。
    • 你能在 stackblitz 或类似网站上重现你的代码吗?我会试着检查一下。
    • 嘿卢西亚诺,它有效!看来我的 Django 模板继承有些问题...谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-31
    • 2021-08-18
    • 2013-05-20
    • 1970-01-01
    • 2011-09-03
    • 2014-05-12
    相关资源
    最近更新 更多