Gibt es eine Möglichkeit zu entfernen, Ajax Header set von setRequestHeader()?
Ich Schreibe ein JS-Skript, das lebt in einem system, das ist jetzt das hinzufügen eines benutzerdefinierten XID-header, um alle Ajax-Anfragen, die über jqXHR.setRequestHeader() in eine Funktion registriert mit jQuery.ajaxPrefilter().
In meinem script, die ich brauche, um eine Ajax-Anfrage zu einer Website Dritter, deren Zugang-Control-Allow-Header ist nicht so eingerichtet, dass dieser Brauch XID-header.
Es scheint, habe ich 3 Optionen:
- Einen Weg finden, zu entfernen, XID-header in $.ajax()'s beforeSend Funktion, die ich bestätigt haben, wird aufgerufen, nachdem die ajaxPrefilter () - Funktion.
- Verzichten auf die Verwendung von $.ajax() vollständig aus und schreiben Sie einfach den Ajax-Zeug mich.
- $.ajax() auf system-backend, die nicht akzeptieren die benutzerdefinierte XID-header, und führen Sie die Anfrage auf die Website Dritter, über cURL.
Option #1 ist am günstigsten, wenn es einen einfachen Weg, es zu tun, da es die sauberste und Schnellste route. Kann einfach nicht herausfinden, wie.
Ich habe versucht, überschreiben, wie diese, aber es hat nicht funktioniert:
beforeSend: function(jqXHR, settings) {
jqXHR.setRequestHeader('custom-xid-header', null);
}
Irgendwelche Ideen?
InformationsquelleAutor der Frage Brandon Kelly | 2013-08-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich weiß, dies ist ein Alter thread, aber es ist immer noch ein problem!!! Hoffe, dass die folgenden helfen beheben es für jemand anderes als für uns.
Einstellung, einen header
null
/undefined
/""
nach dem einrichten nicht entfernen, sendet er den header noch, aber entweder keinen Wert oder den Wert "undefined" oder "null". Dies ist wahrscheinlich nie was Sie wollen, und in unserem Fall Total Schrauben SSO-wenn es der Authorization-header.Die Lösung, die wir uns ausgedacht, beruht auf einem mix von @marlar ' s Vorschlag (danke) und ein weiteres Defizit von jQuery: Sie können nur EINE
beforeSend()
Haken, und jeder neue Haken ersetzt die Vorherige. Es scheint, dass dies auch der Fall, wenn Sie einbeforeSend()
in einem bestimmten$.ajax()
Anfrage - wird es überschreiben die default-in$.ajaxSetup()
. Dadurch verhindern Sie, dass das Standard-Haken aus der Einstellung der Kopfzeile. (Es ist nicht 100% ideal, weil es vielleicht andere Dinge in der Standard -beforeSend()
das wird dann nicht passieren, aber hey).Also diese meistert sowohl die statische als auch für dynamische Header für eine bestimmte Anfrage:
Können Sie das nicht tun das gleiche für
prefilter()
aber ich denkebeforeSend()
ist der weitaus häufigste Weg, dies zu tun sowieso.InformationsquelleAutor der Antwort randomsock
sehen http://api.jquery.com/jQuery.ajaxSetup/
InformationsquelleAutor der Antwort Gerald Chen
Overiding scheint nicht zu funktionieren, aber es gibt eine einfache Lösung.
Überprüfen Sie die sendToken variable. Es ist global.
Beim start meiner app habe ich immer bei der Wahrheit, weil ich brauche den header gesetzt, so ziemlich überall.
Aber wenn ich nicht senden möchten, der "Authorization" - header, die ich geben Sie nur den globalen sendToken zu false vor, jeden Antrag gehen kann. Wenn alle Anfragen abgeschlossen sind habe ich einfach einstellen, dass es wahr wieder...
Der trick ist, dass die jqXHR ist Sie eine lokale variable und nicht halten Sie den zugewiesenen Wert jedes mal.
Und overiding einen aktuellen Wert in der ajaxSetup nicht, weil es immer fügt den neuen Wert anstatt nur zu ersetzen. Mit einer Bedingung auf den oben, es ist glaube ich die am meisten einfache und effiziente Art und Weise.
Es funktionierte für mich.
InformationsquelleAutor der Antwort Doctor
Diese zu entfernen wird ein header-Satz mit $.ajaxSetup(). Ich denke, es wird die Arbeit mit beforeSend() sowie.
InformationsquelleAutor der Antwort marlar