En général $.ajax
demande renvoie XMLHttpRequest
objet ayant la méthode abort
. Donc, si l'appel correspondant de la $.ajax
serait avoir la forme
var lastXhr = $.ajax ({
// parameters
success:function(data,st) {
// do something
lastXhr = null;
},
error:function(xhr,st,err){
// do something
lastXhr = null;
}
});
et nous aurions accès à la valeur lastXhr
alors nous pourrions être en mesure d'appeler lastXhr.abort()
. Je pense qu'une nouvelle méthode comme abortAjaxRequest
dans jqGrid peut être la meilleure solution.
Sans changement du code source de courant de jqGrid la solution pourrait ressemble à la suite
var lastXhr;
var stopAjaxRequest(myGrid) {
$('#cancel').attr('disabled', true); // disable "Cancel" button
lastXhr = null;
myGrid[0].endReq();
};
var grid = $("#list");
grid.jqGrid ({
// all standard options
loadComplete() {
stopAjaxRequest(grid);
},
loadError() {
stopAjaxRequest(grid);
},
loadBeforeSend (xhr) {
l$('#cancel').attr('disabled', false); // enable "Cancel" button
lastXhr = xhr;
}
});
$("#cancel").click(function() {
if (lastXhr) {
lastXhr.abort();
}
});
Dans le code, je suppose, que nous avons un bouton « Annuler » avec l'id = « annuler » à l'extérieur de jqGrid . Je devrais mentionner, que je n'ai pas encore examiné le code ci-dessus, mais j'espère que cela devrait fonctionner.
Vous devez comprendre, car le code ci-dessus interrompt uniquement l'attente du navigateur côté client et le processus sur le serveur se poursuit. Si votre serveur mettra en œuvre l'annulation du côté serveur, le code ci-dessus ne sera plus nécessaire et vous pourrez appeler cette méthode d'abandon de serveur directement.
Il est va être plus que "un peu un hack". Votre plus gros problème va être d'annuler la demande au serveur. S'il existe un moyen de déterminer si la demande va prendre beaucoup de temps, vous pourrez peut-être empêcher la longue requête de commencer. De toute façon, c'est beaucoup de travail, même si l'annulation d'une demande était possible. – Gregg