2013-06-26 14 views
8

Mam dwie oddzielne aplikacje na tym samym serwerze, z EmberJS, próbując wykonywać wywołania międzydomenowe do mojego zaplecza API.CORS - AJAX między domenami bez JSONP Dzięki zezwoleniu na pochodzenie na serwerze

Skonfigurowałem mój interfejs API zaplecza, aby umożliwić wysyłanie żądań między domenami z tego konkretnego źródła. Czy jest jednak jakiś sposób, aby uniknąć używania JSONP z taką konfiguracją? $.ajax blokuje żądania między domenami, zanim zostaną kiedykolwiek wysłane. Jeśli nie, jaki jest sens CORS, który serwer wprowadziłem w celu akceptowania żądań z mojego źródła front-end JS? Żądanie

EDIT

AJAX:

$.ajax({ 
    url: "api.lvh.me:3000/accounts/login", 
    data: cred, 
    type: "POST", 
    xhrFields: { 
     withCredentials: true 
    }, 
    success: function(response){ 
     alert('succeeded!'); 
     console.log(response); 
     alert(response); 
    }, 
    failure: function(message){ 
     alert("failed"); 
     console.log(message); 
     alert(message); 
    } 
}); 
+0

Dlaczego po prostu nie odwracasz serwera proxy tak, aby problem z CORS nigdy nie wystąpił? Edycja: Nie sądzę, że $ .ajax blokuje te żądania, ponieważ musi zapytać serwer, czy są one dozwolone, czy nie ... – Coxer

+0

Czy serwer proxy odwracania nie obsługuje wszystkich żądań krzyżowych? – darksky

+1

Czy próbowałeś przedrostka 'http: //' do atrybutu url w wywołaniu $ .ajax? – Ike

Odpowiedz

9

Nie ma potrzeby korzystania jsonp jeśli włączysz CORS.

Access-Control-Allow-Origin: http://www.example.com 

jeśli ten nagłówek jest ustawiony w odpowiedzi, następnie normalny XmlHttpRequest będą mogli uzyskać dostęp do odpowiedzi, jak gdyby to jest jak tej samej domenie. Sprawdź, czy ten nagłówek jest ustawiony prawidłowo.

Mam nadzieję, że ten link pomoże Ci, jeśli używasz jQuery A CORS POST request works from plain javascript, but why not with jQuery?

Aktualizacja: Przykład

var xmlhttp= new XMLHttpRequest(); 
var url="https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS?redirectlocale=en-US&redirectslug=HTTP_access_control"; 
xmlhttp.open("GET",url,false); 
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); 
xmlhttp.send(); 

Spróbuj tego w dowolnej domeny, otrzymasz odpowiedź.

Aktualizacja rozwiązanie:

żądania URL bez "http: //" spowodowało problem, poprzedzenie "http: //" rozwiązać problem

+0

Zrobiłem dodać 'Access-Control-Allow-Origin: *' w odpowiedzi nagłówka, ale wciąż otrzymuję ten sam błąd. Korzystam z jQuery 1.9, więc problem z jQuery vs. JS nie powinien być problemem. Zobacz moją edycję dla żądania jQuery AJAX, które wysyłam. – darksky

+0

jaki błąd dostałeś? –

+0

Czy to oznacza, że: ** Czy potrzebujemy zmiany w odpowiedzi na usługę sieciową ??? ** –

0

Można użyć rack-cors w Rails 5, aby ustawić to pozwala na wszystkie adresy URL.

0

W środowisku między domenami sugeruję używać JSONP zamiast CORS, ponieważ wiele darmowych hostów nie obsługuje CORS w wielu domenach. Jest on szczegółowo opisany w working examples - zarówno JSONP, jak i CORS.