- Пользователь нажимает на поле поиска
- типов пользователей фамилия
- Если texbox Lengh более 2-х символов Аякса вебсервис является называется
У меня есть проблема с медленными базами данных с тысячами записей ...JQuery Ajax .abort()
Я могу набрать «mcm» и подождать, и он вернет 40 результатов за 3 секунды. Я могу продолжить набирать «mcmil», и он вернет 11 результатов за 1 секунду.
Проблема заключается в том, что я набираю «mcmil» все сразу с нуля, я могу видеть первые 11 результатов, тогда результаты скачков, так как результаты для «mcm» и «mcmi» загружаются, предположительно, поскольку они помедленнее.
Когда зажигается .keyup, мне нужно выяснить, выполняется ли в настоящее время запрос .ajax и отменить его, прежде чем создавать новый.
$('#employeesearchbox').keyup(function() {
if ($("#employeesearchbox").val().length > 2) {
$.ajax({
type: 'POST',
url: './webservices/Contacts.asmx/ContactsDirectorySearch',
data: JSON.stringify({ Surname: $("#employeesearchbox").val() }),
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function (msg) {
var employees = msg.d;
$.each(employees, function (index, employee) {
$('#message').append("<li><a href='javascript:void(0);' class='response_object'>" + employee.Firstname + " " + employee.Department + "</a></li>");
});
},
error: function (xhr, ajaxOptions, thrownError) {
console.error("The error was: " + xhr.responseText);
}
});
}
});
Я посмотрел на этот пост: abort-ajax-requests-using-jquery
Он отменяет запрос непосредственно после .ajax, где, как я, вероятно, хотите, чтобы проверить на следующем нажатии клавиши и, когда я добавить этот код я получаю «объект undefined "- поскольку объект еще не существует!
пожалуйста, помогите
благодаря
var xhr = $.ajax({
...
});
//kill the request
xhr.abort()
Возможно, вы добавили небольшую задержку перед запуском запроса? – Robert
возможно, но я бы скорее очистил предыдущий запрос перед тем, как сделать новый. Некоторые поисковые запросы могут занять до 5-6 секунд, поэтому я бы предпочел не добавлять задержку, чтобы покрыть это, поскольку система может казаться невосприимчивой и расстраивающей! – Scott
Возможно, вы захотите посмотреть на typeahead (https://twitter.github.io/typeahead.js/examples/). Он обрабатывает это для вас запросы времени для вас и отображает результаты для пользователя. Он также ограничивает количество отправленных запросов, так что ваша база данных не попадает слишком часто. – bassxzero