Mam klienta JS (app.domain.com), który łączy się z API napisane w szynach i winogron (api.domain.com). CORS jest skonfigurowany i mam wspólny plik cookie między dwiema domenami, ponieważ logowanie odbywa się na serwerze api.domain.com.Ustawienia domyślne dla wszystkich wywołań ajax jQuery
Ta aplikacja JS używa Spine.js, więc wszystko jest napisane w CoffeeScript. Tak, aby wysłać żądanie usunięcia wystarczy użyć:
@item.destroy
Ten wyśle DELETE żądanie do API. Jednak plik cookie nie są wysyłane wraz z nagłówka żądania, więc musiałem zmienić powyższy wiersz kodu do tego:
$.ajax({
url: "http://api.domain.com/tasks/" + @item.id,
type: "DELETE",
crossDomain: true,
xhrFields: {
withCredentials: true
}
})
I to działa idealnie. Wysyła on nagłówek odpowiedzi "Access-Control-Allow-Credentials: true" wzdłuż żądania, aby plik cookie został przesłany, a akcja uwierzytelniona.
Jednak w ten sposób będę musiał napisać linie kodu dla każdego żądania, które jest naprawdę czasochłonne, a także unieważnia korzyści ze struktury Spine.
Wiem, że możliwe jest ustawienie domyślnych ustawień ajax w jQuery, aby każde następne wywołanie ajaxowe korzystało z tych ustawień. Więc próbowałem:
jQuery.ajaxSetup({
headers: {
"X-Requested-With": "XMLHttpRequest",
"Access-Control-Allow-Credentials": "true"
}, crossDomain: true
});
Które są w zasadzie te same ustawienia, które chciałbym umieścić na każdym wywołaniu ajax ręcznie. Jednak to podejście nie działa, mimo że widzę te nagłówki we wniosku wysłanym do interfejsu API (przez firebug).
Czy brakuje mi czegoś?
Z góry dziękuję!
Dav
można spróbować: '$ .ajaxSetup ({ crossDomain: true, xhrFields: {withCredentials: true}}); '? – Kaeros