Метод abort
звучит как лучший вариант для меня.
Я не знаю много о внутренностях метода ajax
, но я могу придумать несколько способов сделать то, что вы хотите. Оба связаны с глобальным состоянием и будут прерываться, если ваш пользователь сможет отправить второй запрос до того, как первый закончится, поэтому я не уверен, что рекомендую их.
Во-первых, вы можете сохранить ссылку на метод, который делает ваш успех успешным, и изменить его:
MySuccessMethod = function(d, m) { /* handle a success */ };
this._xhr = jQuery.ajax({
type: "GET",
url: "/path/to/service",
data: "name=value",
success: function(data, message){ MySuccessMethod(data, message); },
dataType: "json"
});
// later...
// user cancels request, so change the success method
MySuccessMethod = function(d, m) { /*print a simple message*/ }
В качестве альтернативы, вы можете просто поместить всю логику в один метод успеха и использовать глобальный флаг, чтобы определить, что делать:
success: function(data, message){
if (RequestHasBeenCancelled) {
//display a simple message
}
else {
// handle a success
}
},