<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>
wysyła żądanie OPTIONS do tego adresu URL, a następnie oddzwanianie nigdy nie jest wywoływane z niczym.
Jeśli nie jest to domena wielodomenowa, działa dobrze.
Czy jQuery nie powinien po prostu wywoływać <script>
węzła, a następnie wywoływać oddzwanianie po załadowaniu? Rozumiem, że nie będę w stanie uzyskać wyniku (ponieważ jest to dziedzina między domenami), ale to jest OK; Chcę tylko, żeby połączenie się zakończyło. Czy to błąd, czy robię coś złego?
jquery
xmlhttprequest
http-get
http-options-method
Paul Tarjan
źródło
źródło
Odpowiedzi:
Według MDN ,
źródło
Opcji jest z http://www.w3.org/TR/cors/ Zobacz http://metajack.im/2010/01/19/crossdomain-ajax-for-xmpp-http-binding-made-easy/ dla trochę więcej informacji
źródło
Jeśli próbujesz dokonać POST
Upewnij się, że
JSON.stringify
dane formularza i wyślij jakotext/plain
.źródło
Nie wierzę, że jQuery po prostu wykona żądanie JSONP, jeśli otrzyma taki adres URL. Wykona jednak żądanie JSONP, gdy powiesz mu, jakiego argumentu użyć do wywołania zwrotnego:
Wykorzystanie tego argumentu (który nie musi być nazywany „jsoncallback”) zależy wyłącznie od skryptu odbierającego, więc w tym przypadku funkcja nigdy nie zostanie wywołana. Ale skoro powiedziałeś, że chcesz, aby skrypt w metaward.com był wykonywany, to by się udało.
źródło
W rzeczywistości żądania AJAX między domenami (XMLHttp) są niedozwolone ze względów bezpieczeństwa (pomyśl o pobraniu „ograniczonej” strony internetowej po stronie klienta i odesłaniu jej z powrotem na serwer - byłoby to kwestią bezpieczeństwa).
Jedynym obejściem są połączenia zwrotne. Jest to: utworzenie nowego obiektu skryptu i skierowanie src na stronę JavaScript, która jest wywołaniem zwrotnym z wartościami JSON (myFunction ({data})), myFunction to funkcja, która coś robi z danymi (na przykład przechowuje je w zmiennej).
źródło
Wystarczy zmienić „application / json” na „text / plain” i nie zapomnij o JSON.stringify (żądanie):
źródło
Miałem ten sam problem. Moją poprawką było dodanie nagłówków do mojego skryptu PHP, które są obecne tylko w środowisku deweloperskim.
Umożliwia to żądania między domenami:
Mówi to żądaniu wstępnego sprawdzenia, że klient może wysłać dowolne nagłówki:
W ten sposób nie ma potrzeby modyfikowania żądania.
Jeśli w bazie danych deweloperów znajdują się wrażliwe dane, które mogą zostać ujawnione, możesz pomyśleć o tym dwa razy.
źródło
W moim przypadku problem nie był związany z CORS, ponieważ wysyłałem POST jQuery na ten sam serwer WWW. Dane to JSON, ale pominąłem parametr dataType: „json”.
Nie miałem (ani nie dodałem) parametru contentType, jak pokazano w odpowiedzi Davida Lopesa powyżej.
źródło
Wygląda na to, że Firefox i Opera (testowane również na Macu) nie podoba się temu cross-domena (ale Safari jest w porządku).
Może być konieczne wywołanie lokalnego kodu serwera, aby zawinąć zdalną stronę.
źródło
Udało mi się to naprawić za pomocą następujących nagłówków
Jeśli korzystasz z Nodejs, oto kod, który możesz skopiować / wkleić.
źródło