Wie setze ich Header in Ajax-Aufruf mit jquery

7

Ich muss eine Office 365 Rest-API aus meiner eigenen Anwendung aufrufen.

Wenn ich die URL in derselben Browsersitzung kopiere und einfüge, sehe ich XML.

Wenn ich diese URL in ein Inkognito-Fenster einfüge, erhalte ich folgende Fehlermeldung:

%Vor%

Ich versuche, einen API-Aufruf zu machen, um diese Antwort von meiner Anwendung zu bekommen, wenn ich mit Entwicklertools überprüfe, wie sie den Dienst aufrufen, sehe ich das:

Wie Sie sehen können, hat der API-Aufruf einige Anforderungsheader.

Google Chrome hat die Funktionalität, das als CURL-Anfrage zu kopieren.

Und das funktioniert für mich:

%Vor%

Ich kann eine Antwort wie folgt sehen:

Jetzt versuche ich das gleiche mit $ ajax

zu machen %Vor%

Aber ich bekomme immer diesen Fehler:

Was fehlt mir in diesem Code, um den Dienst nur als CURL aufrufen zu können und mir die Antwort zurückzugeben, die ich brauche?

    
Luis Valencia 09.10.2016, 19:32
quelle

6 Antworten

9

Beantworten Sie Ihre Titelfrage einfach mit den Header-Einstellungen für $ .ajax. Zum Beispiel:

%Vor%

Aber ich denke nicht, dass der Fehler wegen fehlender Header verursacht wird. Sie sollten den Fehler besser erklären, wenn Sie mit der Richtlinie für denselben Ursprung in Verbindung stehen, sollten Sie sich diese Links ansehen Arbeiten mit und um die gleiche Herkunft-Richtlinie und Domainübergreifende Anfragen in Javascript ).

    
mfvjunior 19.10.2016 00:45
quelle
4

Ich denke, Sie müssen weitere Informationen über diesen Fehler angeben, aber meine erste Vermutung wäre, dass der Host keine 'Access-Control-Allow-Origin' aktiviert hat, und deshalb können Sie dies über die Konsole tun.

Sie können versuchen, chrome mit --insecure auszuführen oder einfach das Plugin allow-control-origin zu installieren

    
jonystorm 13.10.2016 04:06
quelle
4

Können Sie versuchen, indem Sie hinzufügen dataType: 'jsonp', crossDomain: true,

    
Rajendar Thatipally 17.10.2016 13:45
quelle
3

Weitere Informationen müssen vorgelegt werden, um dies zu bestätigen, aber jonystorm ist höchstwahrscheinlich richtig. Browser folgen dem same-origin policy . Dies bedeutet, dass alle Anforderungen mit demselben Protokoll, demselben Host und demselben Port ausgeführt werden müssen, um erfolgreich zu sein. Die Ausnahme ist, wenn der angeforderte Server einen Header Access-Control-Allow-Origin enthält. Dieser Header ermöglicht dem Server, explizit die anderen Hosts aufzulisten, die Anforderungen an ihn senden können. Sie können mehr darüber auf MDN lesen.

    
Gavin 18.10.2016 15:36
quelle
0

Meine Vermutung ist, dass, obwohl Sie das Cookie setzen, Ihr Browser es nicht mit der Anfrage sendet, weil es nicht "credentialed" ist. Sie sollten es so einrichten, dass Anmeldeinformationen mit:

verwendet werden %Vor%

Das einzige Problem ist, dass dies Ihr Problem möglicherweise nicht vollständig löst. Denn bei CORS-Anfragen sucht Ihr Browser nach dem Antwortheader Access-Control-Allow-Origin Wenn es nicht mit dem genauen Host übereinstimmt, auf dem Ihre Seite gehostet wird, verweigert der Browser die Antwort auf Ihr Seitenskript. Auch wenn der Server das Ergebnis mit dem Statuscode 200 OK

zurückgibt

Ich nehme an, dass die Office 365-API diesen Header aus Sicherheitsgründen nicht mit Ihrem genauen Host zurückgibt. Wenn es sich nur um Ihre lokale / Entwicklungsumgebung handelt, können Sie Chrome immer ausführen, indem Sie die Same Origin-Richtlinie deaktivieren . Dies sollte das Problem umgehen, dass der Browser es ablehnt, Ihnen die AJAX-Ergebnisse zu liefern.

    
fmello 19.10.2016 22:57
quelle
0

Ich denke, die API erfordert Authentifizierung vor API-Anrufen. Sie sollten js api-Codebeispiele in Betracht ziehen, anstatt curl-type-Header mit jQuery zu verwenden.

Versuchen Sie

1) Ссылка 2) Ссылка Oder lesen Sie die Dokumentation zu office-365-api für Javascript (falls von Microsoft bereitgestellt)

    
Ashokkumar M. Prajapati 20.10.2016 02:51
quelle

Tags und Links