Ich versuche, eine domänenübergreifende HTML-Seite mit AJAX zu laden, aber wenn der Datentyp nicht "jsonp" ist, kann ich keine Antwort erhalten. Bei Verwendung von jsonp erwartet der Browser jedoch einen Skript-MIME-Typ, empfängt jedoch "text / html".
Mein Code für die Anfrage lautet:
$.ajax({
type: "GET",
url: "http://saskatchewan.univ-ubs.fr:8080/SASStoredProcess/do?_username=DARTIES3-2012&_password=P@ssw0rd&_program=%2FUtilisateurs%2FDARTIES3-2012%2FMon+dossier%2Fanalyse_dc&annee=2012&ind=V&_action=execute",
dataType: "jsonp",
}).success( function( data ) {
$( 'div.ajax-field' ).html( data );
});
Gibt es eine Möglichkeit, die Verwendung von jsonp für die Anfrage zu vermeiden? Ich habe bereits versucht, den Parameter crossDomain zu verwenden, aber es hat nicht funktioniert.
Wenn nicht, gibt es eine Möglichkeit, den HTML-Inhalt in jsonp zu empfangen? Derzeit sagt die Konsole in der jsonp-Antwort "unerwartet <".
javascript
jquery
ajax
cross-domain
xonorageous
quelle
quelle
Antworten:
jQuery Ajax Notes
Es gibt einige Möglichkeiten, die domänenübergreifende Barriere zu überwinden :
Es gibt einige Plugins, die bei domänenübergreifenden Anfragen helfen :
Kopf hoch!
Der beste Weg, um dieses Problem zu lösen, besteht darin, einen eigenen Proxy im Back-End zu erstellen, sodass Ihr Proxy auf die Dienste in anderen Domänen verweist, da im Back-End nicht dieselbe Einschränkung für Ursprungsrichtlinien vorhanden ist . Wenn Sie dies im Back-End nicht tun können, beachten Sie die folgenden Tipps.
Warnung!
Die Verwendung von Proxys von Drittanbietern ist keine sichere Vorgehensweise, da sie Ihre Daten verfolgen können, sodass sie mit öffentlichen Informationen verwendet werden können, jedoch niemals mit privaten Daten.
Die unten gezeigten Codebeispiele verwenden jQuery.get () und jQuery.getJSON () . Beide sind Kurzmethoden von jQuery.ajax ()
CORS überall
CORS Anywhere ist ein node.js-Proxy, der der Proxy-Anforderung CORS-Header hinzufügt.
Um die API zu verwenden, stellen Sie der URL einfach die API-URL voran. (Unterstützt https : siehe Github-Repository )
Wenn Sie domänenübergreifende Anforderungen bei Bedarf automatisch aktivieren möchten, verwenden Sie das folgende Snippet:
Welchen Ursprung auch immer
Was auch immer Origin ist ein domänenübergreifender Jsonp- Zugriff. Dies ist eine Open Source-Alternative zu anyorigin.com .
Um die Daten von google.com abzurufen , können Sie dieses Snippet verwenden:
CORS-Proxy
Der CORS-Proxy ist ein einfacher node.js-Proxy, mit dem die CORS-Anforderung für jede Website aktiviert werden kann. Es ermöglicht Javascript-Code auf Ihrer Site, auf Ressourcen in anderen Domänen zuzugreifen, die normalerweise aufgrund der Richtlinie mit demselben Ursprung blockiert würden.
Wie funktioniert es? CORS Proxy nutzt die Cross-Origin Resource Sharing, eine Funktion, die zusammen mit HTML 5 hinzugefügt wurde. Server können festlegen, dass Browser anderen Websites erlauben sollen, von ihnen gehostete Ressourcen anzufordern. CORS-Proxy ist einfach ein HTTP-Proxy, der Antworten mit der Aufschrift "Jeder kann dies anfordern" einen Header hinzufügt.
Dies ist ein weiterer Weg, um das Ziel zu erreichen (siehe www.corsproxy.com ). Alles was Sie tun müssen, ist http: // und www zu entfernen. von der URL, für die ein Proxy erstellt wird, und stellen Sie die URL mit voran
www.corsproxy.com/
CORS-Proxy-Browser
Kürzlich habe ich dieses gefunden, es beinhaltet verschiedene sicherheitsorientierte Cross Origin Remote Sharing-Dienstprogramme. Aber es ist eine Blackbox mit Flash als Backend.
Sie können es hier in Aktion sehen: CORS-Proxy-Browser
Holen Sie sich den Quellcode auf GitHub: koto / cors-proxy-browser
quelle
$.ajaxPrefilter
und es hat super funktioniert. Danke vielmals!Sie können Ajax-Cross-Origin als jQuery-Plugin verwenden. Mit diesem Plugin verwenden Sie
jQuery.ajax()
domänenübergreifend. Hierzu werden Google-Dienste verwendet:Es ist sehr einfach zu bedienen:
Sie können hier mehr lesen: http://www.ajax-cross-origin.com/
quelle
crossOrigin
Option von jQuery trägt sicherlich nicht dazu bei, Richtlinien mit demselben Ursprung zu mildern. Ich würde diese Antwort löschen, wenn ich könnteWenn die externe Site JSONP oder CORS nicht unterstützt, können Sie nur einen Proxy verwenden.
Erstellen Sie auf Ihrem Server ein Skript, das diesen Inhalt anfordert, und verwenden Sie dann jQuery ajax, um das Skript auf Ihrem Server aufzurufen.
quelle
Fügen Sie dies einfach in den Header Ihrer PHP-Seite ein und es funktioniert ohne API nicht:
oder
oder
quelle
$_SERVER['HTTP_ORIGIN']
kommt. Ich konnte es nicht in der PHP-Dokumentation oder anderswo finden.Ich poste dies für den Fall, dass jemand das gleiche Problem hat, mit dem ich gerade konfrontiert bin. Ich habe einen Zebra-Thermodrucker, der mit dem ZebraNet-Druckserver ausgestattet ist und eine HTML-basierte Benutzeroberfläche zum Bearbeiten mehrerer Einstellungen, Anzeigen des aktuellen Status des Druckers usw. bietet. Ich muss den Status des angezeigten Druckers abrufen auf einer dieser HTML-Seiten, die vom ZebraNet-Server angeboten werden, und beispielsweise alert () eine Nachricht an den Benutzer im Browser. Dies bedeutet, dass ich diese HTML-Seite zuerst in Javascript erhalten muss. Obwohl sich der Drucker im LAN des PCs des Benutzers befindet, gilt diese Richtlinie für denselben Ursprungbleibt mir immer noch fest im Weg. Ich habe JSONP ausprobiert, aber der Server gibt HTML zurück und ich habe keine Möglichkeit gefunden, seine Funktionalität zu ändern (wenn ich könnte, hätte ich bereits den magischen Header Access-control-allow-origin gesetzt: *). Also habe ich beschlossen, eine kleine Konsolen-App in C # zu schreiben. Es muss als Admin ausgeführt werden, damit es ordnungsgemäß funktioniert. Andernfalls wird Folgendes ausgeführt: D eine Ausnahme. Hier ist ein Code:
Der Benutzer muss lediglich diese Konsolen-App als Administrator ausführen. Ich weiß, dass es viel zu ... frustrierend und kompliziert ist, aber es ist eine Art Problemumgehung für das Domänenrichtlinienproblem, falls Sie den Server in keiner Weise ändern können.
edit: von js Ich mache einen einfachen Ajax-Aufruf:
Das HTML der angeforderten Seite wird zurückgegeben und in der Datenvariablen gespeichert .
quelle
Um die Daten von einer externen Site zu erhalten, indem Sie einen lokalen Proxy verwenden, wie von jherax vorgeschlagen, können Sie eine PHP-Seite erstellen, die den Inhalt für Sie von der jeweiligen externen URL abruft, und dann eine Get-Anfrage an diese PHP-Seite senden.
Als PHP-Proxy können Sie https://github.com/cowboy/php-simple-proxy verwenden
quelle
Ihr
URL
funktioniert heutzutage nicht, aber Ihr Code kann mit dieser funktionierenden Lösung aktualisiert werden:quelle
Sie benötigen einen CORS-Proxy, der Ihre Anfrage von Ihrem Browser an den angeforderten Dienst mit den entsprechenden CORS-Headern weiterleitet . Eine Liste solcher Dienste finden Sie im Code-Snippet unten. Sie können auch das bereitgestellte Code-Snippet ausführen, um von Ihrem Standort aus einen Ping an solche Dienste zu senden.
quelle
Herausgefunden. Verwendet dies stattdessen.
quelle