Aufruf Externer API mit Javascript
Ich brauche, um einen POST-request an einen externen server aus meiner Webseite, mit Javascript. Der Körper und die Reaktion sind sowohl json. Ich kann nicht herausfinden, wie man diese aufrufen oder welche Instrumente um zu verwenden. Wie Mach ich das nennen?
Dies ist, was ich bisher mit jQuery und ajax:
var body = '{"method":"getViews","params":{"filter":{"operator":"and","clauses":[{"operator":"matches","value":"'+ inputValue +'"}]},"order":[{"field":"name","ascending":true}],"page":{"startIndex":0,"maxItems":5}}}';
var response = $.ajax({
url: "http://" + environment + "/vizportal/api/web/v1/getViews",
method: "post",
dataType:'json',
data: JSON.stringify(body),
headers: {
'Content-Type': 'text/plain',
'X-XSRF-TOKEN' : XSRFToken,
'Cookie': 'workgroup_session_id='+workgroupSessionId+';XSRF-TOKEN='+XSRFToken
},
success:function(response){
alert("success");
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
alert("Status: " + textStatus); alert("Error: " + errorThrown);
}
});
Es wirft ein Warnungen, die sagt nur "Status:" und "Fehler:"
Die Konsole sagt, das "XMLHttpRequest-Objekt kann nicht geladen werden http://[domain]/vizportal/api/web/v1/getViews. Kein "Access-Control-Allow-Origin' - header vorhanden ist, auf die angeforderte Ressource. Herkunft 'http://[domain]' ist daher nicht der Zugriff erlaubt. Die Antwort hatte Sie den HTTP-status-code 405."
- schauen Sie in ajax.
- Sind Sie mit einer bestimmten JavaScript-libraries im moment?
- und SOP und CORS
- Mit benutzerdefinierten Kopf-und ausführen von javascript aus einer Datei und nicht auf einem server verursachen, CORS Fragen (kein Zugriff auf origin-Fehler). Sie können um einige dieser Probleme auftreten, wenn Sie IE verwenden.
- HTTP-Fehler 405 Methode nicht erlaubt So-change-Methode zu
POST
, auch brauchen Sie nicht zu tun stringify, weil Ihr Körper Inhalt schon Zeichenfolge, und ändern SieContent-Type
zuapplication/json
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie der Eigentümer das Ziel des Gesprächs? Wenn ja, implementieren Sie die CORS-Header im server-Seite.
Wenn Nein, können Sie die Geige mit JSONP (es umgeht CORS), oder Sie können sogar implementieren ein server-side proxy, dass Sie die eigene route externen Anfragen (und natürlich auch umzusetzen CORS dort).
Überprüfen Sie heraus die Artikel auf CORS in MDN wenn Sie mehr Informationen möchten : HTTP access control (CORS) auf MDN
Können Sie JQUERY und AjAX. Sie können senden/Holen Sie sich Informationen zu/von Ihrem API entweder mit der post oder get-Methode.
Wäre es etwas wie das:
Ajax:
http://api.jquery.com/jquery.ajax/
.stringify()
??Verletzen Sie die so genannte same-origin-policy hier. Die meisten Browser erlauben es nicht, ein Skript Zugriff auf URLs, die nicht über den gleichen Hostnamen und port, der als der Seite, wo das Skript liegt. Dies ist eine sehr strenge Sicherheits-policy und wurde oft sehr schwer zu überwinden, auch für Testzwecke.
Traditionell der einfachste Weg zu gehen, um dieses zu verwenden, Ihre eigene Website als proxy und leitet die Anfrage über die an den externen server. Aber wenn Sie nicht genug Kontrolle auf Ihrer eigenen Website eine solche Lösung zu implementieren, die Dinge wurden komplizierter. Wenn Sie die Internet-Suche mit "same-origin-policy" finden Sie eine Menge Diskussion über das Thema und andere Ideen, um es zu lösen.
Mein erste Vorschlag wäre zu prüfen, das "Access-Control-Allow-Origin", dass Ihre Fehlermeldung erwähnt, obwohl ich bin nicht vertraut mit es mich. Es ist im Zusammenhang mit einem neuen System namens CORS, der Hinzugefügt wurde, um die W3C-Empfehlungen vor kurzem (2014), und scheint eine Breite Unterstützung für die neuesten Versionen von vielen Browsern. Vielleicht haben wir Entwickler sind endlich einige Werkzeuge, um die Arbeit mit dieser irritierenden Frage.
Wenn Sie möchten, verwenden Sie unterschiedliche domain-ajax-call, dann müssen Sie zur Verwendung des datatype JSONP die es erlauben, browser, cross-domain-Anfrage.
Hier ist Sie Dokument für die JSONP : https://learn.jquery.com/ajax/working-with-jsonp/
Wenn Sie jquery verwenden, verwenden Sie .post, oder .ajax submit
$.post(url, data, callbackSuccess, callbackError);
mehr über diese Methoden hier http://api.jquery.com/jquery.ajax/
Beispiel: