【发布时间】:2020-02-02 03:02:46
【问题描述】:
我有一个搜索框,它使用 jqueryUI .autocomplete 通过 AJAX 获取数据以提供建议。问题是,当用户在对源的自动完成 AJAX 调用完成之前按 Enter 键时,会在警告框中弹出错误。 “AJAX 错误 0”
我假设当用户在搜索框中点击“Enter”时,浏览器会自动停止 AJAX 调用,从而导致错误的 AJAX 响应触发 jqueryui 弹出错误。有没有办法让这不会发生?下面是一些自动完成的示例代码:
$("#searchBar_searchAll").on("keydown", function(event) {
if (event.keyCode === $.ui.keyCode.TAB && $(this).autocomplete("instance").menu.active ) {
event.preventDefault();
}
}).autocomplete({
source: function(request, response) {
$.getJSON('<?php echo CController::createUrl("inventory/searchAutocomplete"); ?>', {
searchString: extractLast(request.term),
searchScopeRecord: $("#searchScope_recordScope option:selected").val(),
searchScopeActive: $("#searchScope_activeScope option:selected").val(),
searchOptions: $("#searchBar_searchoption_searchAll option:selected").val()
}, response);
},
search: function() {
var searchString = extractLast(this.value);
if (searchString.length < 3)
return false;
},
focus: function() {
return false;
},
select: function(event, ui) {
window.location.href = '<?php echo CController::createUrl("inventory/update"); ?>' + '&id=' + ui.item.value;
return false;
}
});
编辑:该问题有时仅在进一步测试时发生,而且似乎几乎每次都在较慢的机器上发生。这似乎与机器执行 Javascript 的速度有关。
似乎发生 AJAX 错误 0 是因为当用户提交搜索时它取消了 AJAX 请求。似乎当取消此操作时,jquery-ui 的 .autocomplete 可能会由于没有数据而触发错误弹出窗口。无论如何我可以干净地取消 AJAX 请求,然后当有人点击输入或提交按钮时,这样的 AJAX 错误就不会发生?
【问题讨论】:
-
请详细说明 jQuery 和 jQuery UI 版本,哪个浏览器,以及
input是否在form中。我无法在 Chrome 下重现您的问题,最新版本的 jQuery -
@Twistingnether
jQuery v1.11.2和jQuery UI - v1.11.4。输入字段在表单中,表单在表格中。 -
好的@ComputerLocus,哪个浏览器?另外,您是在谈论显示错误或一些 jQuery 弹出窗口的原生
alert()吗?我在 jQuery 的代码中没有看到任何alert() -
@Twistingnether 它是一个警告框。它来自 jquery-ui。它发生在所有浏览器上,但是 Chrome 会抑制警报并在控制台中指示这一点。在控制台中,Chrome 表示它在导航期间“阻止”了警报。
-
由于这是通过 PHP 从您的 Web 服务器获取数据,您能否描述从单个字符返回的结果数量。由于您正在立即执行搜索,例如,如果用户输入
"a",您希望得到 5 个结果还是 5000 个结果?
标签: javascript jquery ajax jquery-ui