【发布时间】:2020-09-02 05:29:25
【问题描述】:
我正在尝试将 jQuery AutoComplete 用于客户端/客户选择输入字段 - 在一个简单的测试 HTML 页面上(一旦 AJAX 部分工作,我计划对其进行增强)。
我已经从https://jqueryui.com/autocomplete/#remote-jsonp 复制(逐字)JQuery 示例 JavaScript,我对此所做的唯一更改是“#...”ID 名称和“源”定义中的 URL 值。
后端服务器(运行 Django)很好地接收来自 JavaScript 的请求,并且似乎正确地生成了 JSON 回调字符串。这是它的输出:
卷曲http://localhost:52974/AjaxClientAutocomplete/?term=Adm
[ {label: "ADMAC", value: "109"}, {label: "Administration Software L", value: "110"}, {label: "Adminsoft - Office Rental", value: " 111"},{标签:“Adminsoft - Reimburse Int”,值:“112”},{标签:“Adminsoft - 版税”,值:“113”},{标签:“adminsoftware.biz”,值:“114 "}, {label: "Admiral Word Publishing B", value: "115"} ]
使用浏览器上的开发人员工具,我已将 DOM 看到的 HTML 复制到硬盘上的测试 HTML 文件中。我已将其缩减为最基本的内容,并制作了几个变体来测试哪些有效,哪些无效。
使用局部变量作为自动完成“源:”可以正常工作 - 包括按照上面显示的完整字符串将它作为对象数组(复制并粘贴到 JavaScript 中)。
总之:
- JavaScript(如下所示)似乎正在向服务器发送请求正常。
- 服务器正在接收这些并做出响应 - 似乎带有正确的 JSONP 响应。
- JavaScript 似乎并没有处理这个并更新它的源标签/值列表,所以它可以使用它(就像它成功的那样,当“源:”是具有相同对象列表的变量时)。
- 还是 JSONP 响应有问题? (注意:我尝试在“label”和“value”键周围添加引号,但没有成功。将这个确切的文本作为变量的值粘贴到 JavaScipt 中时效果很好,该变量被用作 AutoComplete “source:” AJAX 函数。)
我对这个技术领域还很陌生,想不出其他可以尝试的方法。谁能看到我错过了什么?这是 JavaScript:
// AjaxClientAutocomplete.js Created by GE on 16 May 2020
// Expects Django to handle the AJAX request being made using an HTTP GET to an URL of "/AjaxClientAutocomplete/"
// The search string will be passed in a parameter named "term"
// The Django HTML template must give the input field an ID of "idClientName": e.g. <input type="text" name="ClientName" id="idClientName">
// It also should have a an HTML element with id="log" which will accept the output from the "log()" function - which will be disabled once working.
$(function () {
function log(message) {
$("<div>").text(message).prependTo("#log");
$("#log").scrollTop(0);
}
$("#idClientName").autocomplete({
source: function (request, response) {
$.ajax({
url: "/AjaxClientAutocomplete/",
dataType: "jsonp",
data: {
term: request.term
},
success: function (data) {
response(data);
}
});
},
minLength: 2,
select: function (event, ui) {
log("Selected: " + ui.item.value + " aka " + ui.item.id);
}
});
});
这里是 HTML 模板的相关部分:
<form action="" method="get">
{% csrf_token %}
<div class="ui-widget">
<label for="ClientName">Client Name Search: </label>
<input type="text" name="ClientName" id="idClientName">
</div>
<input type="submit" value="Go">
</form>
<div class="ui-widget" style="margin-top:2em; font-family:Arial">
Result:
<div id="log" style="height: 200px; width: 300px; overflow: auto;" class="ui-widget-content"></div>
</div>
【问题讨论】:
-
感谢您提供此链接。它提供了一些有趣的更广泛的背景阅读。然而,不幸的是它并没有真正解决我遇到的问题。
标签: javascript jquery ajax autocomplete django-templates