javascript - success - jqxhr




Fügen Sie Header in AJAX Request mit jQuery hinzu (4)

Ich möchte einen benutzerdefinierten Header zu einer AJAX POST-Anfrage von jQuery hinzufügen.

Ich habe das versucht:

$.ajax({
    type: 'POST',
    url: url,
    headers: {
        "My-First-Header":"first value",
        "My-Second-Header":"second value"
    }
    //OR
    //beforeSend: function(xhr) { 
    //  xhr.setRequestHeader("My-First-Header", "first value"); 
    //  xhr.setRequestHeader("My-Second-Header", "second value"); 
    //}
}).done(function(data) { 
    alert(data);
});

Wenn ich diese Anfrage sende und mit FireBug zusehe, sehe ich diesen Header:

OPTIONEN xxxx / yyyy HTTP / 1.1
Gastgeber: 127.0.0.1:6666
Benutzer-Agent: Mozilla / 5.0 (Windows NT 6.1; WOW64; rv: 11.0) Gecko / 20100101 Firefox / 11.0
Übernehmen: text / html, application / xhtml + xml, application / xml; q = 0,9, / ; q = 0,8
Accept-Sprache: fr, fr-fr, q = 0.8, en-us, q = 0.5, en, q = 0.3
Accept-Encoding: gzip, deflate
Verbindung: Keep-Alive
Ursprung: null
Zugriffskontroll-Anfrage-Methode: POST
Access-Control-Request-Header: Mein-Erster-Header, Mein-Zweiter-Header
Pragma: Kein Cache
Cache-Kontrolle: Kein Cache

Warum gehen meine benutzerdefinierten Header zu Access-Control-Request-Headers :

Access-Control-Request-Header: Mein-Erster-Header, Mein-Zweiter-Header

Ich habe einen Header-Wert wie folgt erwartet:

My-First-Header: erster Wert
Mein-Zweiter-Header: zweiter Wert

Ist es möglich?


Aus diesem Grund können Sie keinen Bot mit Javascript erstellen, da Ihre Optionen auf das begrenzt sind, was der Browser Ihnen erlaubt. Sie können nicht einfach einen Browser bestellen, der der CORS Richtlinie folgt, der die meisten Browser folgen, um zufällige Anfragen an andere Ursprünge zu senden und Ihnen die Antwort zu geben, die einfach ist!

Wenn Sie außerdem versucht haben, einige Anforderungsheader wie origin-header manuell aus den mit den Browsern OPTIONS bearbeiten, OPTIONS der Browser die Bearbeitung ab und sendet möglicherweise eine Preflight- OPTIONS Anforderung.


Dieser Code funktioniert für mich. Ich benutze immer nur einzelne Klammern, und es funktioniert gut. Ich schlage vor, Sie sollten nur einzelne Klammern ODER nur doppelte Klammern verwenden, aber nicht verwechselt.

$.ajax({
    url: 'YourRestEndPoint',
    headers: {
        'Authorization':'Basic xxxxxxxxxxxxx',
        'X_CSRF_TOKEN':'xxxxxxxxxxxxxxxxxxxx',
        'Content-Type':'application/json'
    },
    method: 'POST',
    dataType: 'json',
    data: YourData,
    success: function(data){
      console.log('succes: '+data);
    }
  });

Hoffe das beantwortet deine Frage ...


Versuchen Sie, rack-cors Juwel zu verwenden. Und fügen Sie das Header-Feld in Ihrem Ajax-Anruf hinzu.


Was Sie in Firefox gesehen haben, war nicht die eigentliche Anfrage. Beachten Sie, dass die HTTP-Methode OPTIONS ist, nicht POST. Es war eigentlich die "Pre-Flight" -Anforderung, die der Browser trifft, um zu bestimmen, ob eine domainübergreifende AJAX-Anfrage erlaubt sein sollte:

http://www.w3.org/TR/cors/

Der Header "Access-Control-Request-Header" in der Pre-Flight-Anforderung enthält die Liste der Header in der tatsächlichen Anforderung. Es wird dann erwartet, dass der Server zurückmeldet, ob diese Header in diesem Kontext unterstützt werden oder nicht, bevor der Browser die tatsächliche Anforderung übermittelt.





http-headers