У меня есть окно поиска, которое использует jqueryUI .autocomplete
для получения данных через AJAX, чтобы давать предложения. Проблема в том, что когда пользователь нажимает клавишу ввода до того, как выполняется автозаполнение вызова AJAX к источнику, в окне предупреждения появляется сообщение об ошибке. «Ошибка 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. Кажется, что когда это отменено, jauery-ui .autocomplete, вероятно, вызывает всплывающее окно с ошибкой из-за отсутствия данных. Могу ли я в любом случае отменить запрос AJAX, когда кто-нибудь нажмет Enter или кнопку отправки, чтобы такая ошибка AJAX не возникала?