jQueryUI 自动完成返回 AJAX 错误 0 当用户点击回车
jQueryUI Autocomplete Returning AJAX Error 0 when user hits enter
我有一个搜索框,它使用 jqueryUI .autocomplete
通过 AJAX 获取数据以提供建议。问题在于,当用户在自动完成 AJAX 对源的调用完成之前按回车键时,警告框中会弹出一个错误。 "AJAX Error 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 错误就不会发生?
如果您按回车键,浏览器会默认提交表单。虽然 ajax-请求需要时间(如果不是从浏览器缓存中传送),浏览器表单提交会立即触发并中断您的 运行 ajax-请求。结果你看到那些 ajax 错误。
也许您可以设置一个辅助变量,如果您按 Enter 并跳过 JSON 函数,如果此变量为真。
var bEnterPressed = false;
$("#searchBar_searchAll").on("keydown", function(event) {
var iKey = event.keyCode || event.which; // event.which is for old IE compatibility
bEnterPressed = false;
if (event.keyCode === $.ui.keyCode.TAB && $(this).autocomplete("instance").menu.active ) {
event.preventDefault();
}
// Detect Enter = key 37
if( iKey === 37 ) {
bEnterPressed = true;
}
}).autocomplete({
source: function(request, response) {
if( bEnterPressed ) { return false; } // skip ajax-request, if Enter was pressed
try {
$.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);
} catch(e) {
// ignore ajax-errors
}
},
// ...
});
您好,我想您正在寻找输入搜索功能。
你只需要这个属性
$("#searchBar_searchAll").autocomplete({ autoFocus: true });
我没有你的 php api 代码,所以我放了一个示例数组源用于我的自动完成。
这里正在工作example
ajax 来源的另一个示例。但它已经提到至少我们需要等待 ajax 请求应该完成并且 return 有结果。
这是另一个 example 来源ajax。
我有一个搜索框,它使用 jqueryUI .autocomplete
通过 AJAX 获取数据以提供建议。问题在于,当用户在自动完成 AJAX 对源的调用完成之前按回车键时,警告框中会弹出一个错误。 "AJAX Error 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 错误就不会发生?
如果您按回车键,浏览器会默认提交表单。虽然 ajax-请求需要时间(如果不是从浏览器缓存中传送),浏览器表单提交会立即触发并中断您的 运行 ajax-请求。结果你看到那些 ajax 错误。
也许您可以设置一个辅助变量,如果您按 Enter 并跳过 JSON 函数,如果此变量为真。
var bEnterPressed = false;
$("#searchBar_searchAll").on("keydown", function(event) {
var iKey = event.keyCode || event.which; // event.which is for old IE compatibility
bEnterPressed = false;
if (event.keyCode === $.ui.keyCode.TAB && $(this).autocomplete("instance").menu.active ) {
event.preventDefault();
}
// Detect Enter = key 37
if( iKey === 37 ) {
bEnterPressed = true;
}
}).autocomplete({
source: function(request, response) {
if( bEnterPressed ) { return false; } // skip ajax-request, if Enter was pressed
try {
$.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);
} catch(e) {
// ignore ajax-errors
}
},
// ...
});
您好,我想您正在寻找输入搜索功能。
你只需要这个属性
$("#searchBar_searchAll").autocomplete({ autoFocus: true });
我没有你的 php api 代码,所以我放了一个示例数组源用于我的自动完成。
这里正在工作example
ajax 来源的另一个示例。但它已经提到至少我们需要等待 ajax 请求应该完成并且 return 有结果。
这是另一个 example 来源ajax。