/ / detekovať požiadavku ajaxu pomocou jQuery - jquery, ajax, asp.net-ajax

odhaliť ajax požiadavku jquery - jquery, ajax, asp.net-ajax

Pracujem s kontrolami asp a mám nejakérozbaľovací zoznam, ktorý sa vo výbere vracia späť na server a vykonáva určité kroky (prostredníctvom asp ajax) to, čo hľadám, je detekcia pomocou jQuery, keď sa začne ajaxové volanie Skúsil som nasledujúci hovor:

  $.ajaxSetup({
beforeSend: function (jqXHR, settings) {
alert("ok");
return false;
}
});

a

also  $(document).ajaxStart(function () {
alert("OK");
});

ale nič z toho nefungovalo

odpovede:

3 pre odpoveď č. 1

dobre, ak $(document).ajaxStart(function() {}); nepracuje pre teba, skús trochu surové js,

var oldXHR = window.XMLHttpRequest;

function newXHR() {
var realXHR = new oldXHR();
realXHR.addEventListener("readystatechange", function() {
if(realXHR.readyState==1){
alert("server connection established");
}
if(realXHR.readyState==2){
alert("request received");
}
if(realXHR.readyState==3){
alert("processing request");
}
if(realXHR.readyState==4){
alert("request finished and response is ready");
}
}, false);
return realXHR;
}
window.XMLHttpRequest = newXHR;

Mal by vám dať všetky stavy žiadosti ajax a skontrolovať, ktorý z nich pracuje pre vás, a potom u môžete odstrániť zvyšné podmienky if. môžete ho umiestniť mimo $(document).ready(function(){});


2 pre odpoveď č. 2

Je to vážne nie odporúčané, ale môžete použiť .ajaxStart() a .ajaxComplete() manipulátory:

$(document).ajaxStart(function() {
console.log("Ajax call started");
$("#loading").show();
});
$(document).ajaxComplete(function() {
console.log("Ajax call completed");
$("#loading").hide();
});

Dôležitá poznámka Od jQuery 1.9 musia byť pripojené všetky obslužné rutiny pre jQuery globálne udalosti Ajax document.

Majte na pamäti, že ak váš hovor ajax zahŕňa global: false, požiadavka bude ignorovať predvolené globálne konfigurácie hovoru (čo tiež znamená .ajaxStart() a .ajaxComplete() spätné volania nebudú volané.

Ak nechcete nastaviť globálne spätné volania, môžete ich nastaviť konkrétne na volanie ajax:

$.ajax({
method: "GET", // or POST
url: "path",
....
beforeSend: function() {
console.log("Ajax call started");
$("#loading").show();
},
complete: function() {
console.log("Ajax call completed");
$("#loading").hide();
}
});

1 pre odpoveď č. 3

Môžete ukázať svoje loader / waiting image týmto spôsobom žiadosť.

$("#loading-image").show();
$.ajax({
url: uri,
cache: false,
success: function(html){
$(".info").append(html);
},
complete: function(){
$("#loading-image").hide();
}
});

Ak sa chcete viazať global events Páči sa mi to ajaxStart a ajaxStop.

$("#loading").bind("ajaxStart", function(){
$(this).show();
}).bind("ajaxStop", function(){
$(this).hide();
});