<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.js" type="text/javascript"></script>
<script>
$.get("http://example.com/", function(data) {
alert(data);
});
</script>
Es führt eine OPTIONS-Anforderung an diese URL durch, und dann wird der Rückruf nie mit irgendetwas aufgerufen.
Wenn es nicht domänenübergreifend ist, funktioniert es einwandfrei.
Sollte jQuery nicht einfach den Anruf mit einem <script>
Knoten tätigen und dann den Rückruf ausführen, wenn dieser geladen ist? Ich verstehe, dass ich das Ergebnis nicht erhalten kann (da es domänenübergreifend ist), aber das ist in Ordnung. Ich möchte nur, dass der Anruf durchgeht. Ist das ein Fehler oder mache ich etwas falsch?
jquery
xmlhttprequest
http-get
http-options-method
Paul Tarjan
quelle
quelle
Antworten:
Nach MDN ,
quelle
Die OPTIONEN stammen von http://www.w3.org/TR/cors/. Siehe http://metajack.im/2010/01/19/crossdomain-ajax-for-xmpp-http-binding-made-easy/ für ein bisschen mehr Infos
quelle
Wenn Sie versuchen zu POSTEN
Stellen Sie sicher, dass
JSON.stringify
Ihre Formulardaten und senden alstext/plain
.quelle
Ich glaube nicht, dass jQuery auf natürliche Weise eine JSONP-Anfrage ausführt, wenn eine solche URL angegeben wird. Es wird jedoch eine JSONP-Anforderung ausgeführt, wenn Sie angeben, welches Argument für einen Rückruf verwendet werden soll:
Es liegt ganz beim empfangenden Skript, dieses Argument zu verwenden (das nicht "jsoncallback" heißen muss). In diesem Fall wird die Funktion also niemals aufgerufen. Da Sie jedoch angegeben haben, dass das Skript auf metaward.com nur ausgeführt werden soll, ist dies der Fall.
quelle
Domänenübergreifende AJAX-Anforderungen (XMLHttp) sind aus Sicherheitsgründen nicht zulässig (denken Sie daran, eine "eingeschränkte" Webseite vom Client abzurufen und an den Server zurückzusenden - dies wäre ein Sicherheitsproblem).
Die einzige Problemumgehung sind Rückrufe. Dies ist: Erstellen eines neuen Skriptobjekts und Zeigen des src auf das endseitige JavaScript, bei dem es sich um einen Rückruf mit JSON-Werten handelt (myFunction ({data}). MyFunction ist eine Funktion, die etwas mit den Daten tut (z. B. das Speichern) in einer Variablen).
quelle
Ändern Sie einfach die "application / json" in "text / plain" und vergessen Sie nicht die JSON.stringify (Anfrage):
quelle
Ich hatte das gleiche Problem. Mein Fix bestand darin, meinem PHP-Skript Header hinzuzufügen, die nur in einer Entwicklungsumgebung vorhanden sind.
Dies ermöglicht domänenübergreifende Anforderungen:
Dies teilt der Preflight-Anforderung mit, dass der Client alle gewünschten Header senden kann:
Auf diese Weise muss die Anforderung nicht geändert werden.
Wenn Ihre Entwicklungsdatenbank vertrauliche Daten enthält, die möglicherweise durchgesickert sind, sollten Sie dies zweimal überlegen.
quelle
In meinem Fall hatte das Problem nichts mit CORS zu tun, da ich einen jQuery-POST an denselben Webserver ausgegeben habe. Die Daten waren JSON, aber ich hatte den Parameter dataType: 'json' weggelassen.
Ich hatte keinen contentType-Parameter (und habe ihn auch nicht hinzugefügt), wie in der obigen Antwort von David Lopes gezeigt.
quelle
Es sieht so aus, als ob Firefox und Opera (auch auf dem Mac getestet) die Domänenübergreifende nicht mögen (aber Safari ist damit einverstanden).
Möglicherweise müssen Sie einen lokalen serverseitigen Code aufrufen, um die Remote-Seite zu locken.
quelle
Ich konnte es mit Hilfe der folgenden Überschriften beheben
Wenn Sie auf Nodejs sind, finden Sie hier den Code, den Sie kopieren / einfügen können.
quelle