2013-06-07 6 views
5

Ich möchte globale Handler für Ajax-Anfragen setzen, aber nur für POST Fälle.

Leider werden die globalen Handler $.ajaxStart() und $.ajaxStop() für alle Anfragen ausgelöst, und soweit ich sehen kann, gibt es keinen Parameter, der an die Handler-Funktion übergeben wird. Die Dokumentation ist auch knapp, wie die meisten jQuery-Dokumentation ist.

Kann ich den Anforderungstyp in einem globalen Ajax-Handler erkennen?

+0

i so glaube nicht. Obwohl ajaxStop aufgerufen wird, wenn JEDER Ajax-Aufruf beendet wurde, sollte daher der Anforderungstyp sein, wenn mehr als eine Anforderung vorhanden war. – luk2302

Antwort

5

Sie haben diese Ereignisse stattdessen verwenden: ajaxSend()ajaxComplete()

$(document).ajaxSend(function (event, xhr, options) { 
    if (options.type.toUpperCase() === "POST") console.log('POST request');; 
}).ajaxComplete(function (event, xhr, options) { 
    if (options.type.toUpperCase() === "POST") console.log('POST request'); 
}); 

ajaxSend verwenden, können Sie Abbruch der Anfrage mit: xhr.abort()

EDIT:

Besser wäre jQuery.ajaxPrefilter wie in der Antwort des @ Demouser verwenden

+0

Danke! Verstehe ich richtig, dass '$ .ajaxStart()' einmal für die gesamte Warteschlange abgefeuert wird, so hat es keinen Typ selbst, während '$ .ajaxSend()' für jede Anfrage abgefeuert wird, damit es zugreifen kann der Anfragetyp? – George

+0

Ya, scheint eine korrekte Aussage –

5

Ich denke, man so etwas tun könnte:

jQuery.ajaxPrefilter(function(options) { 
    if(options.type !== 'POST') { 
     options.global = false; 
    } 
}); 

Siehe :: jQuery prefilters

+0

In der Tat, es sollte die akzeptierte Antwort sein :) –

Verwandte Themen