/ / JSONP działa w Chrome, ale nie w Firefox / IE? - javascript, jquery, ajax, jsonp, cors

JSONP działa w Chrome, ale nie w Firefox / IE? - javascript, jquery, ajax, jsonp, cors

Tworzę witrynę mobilną i używam JSONPza pośrednictwem jQuery żąda skontaktowania się z serwerem danych w celu pobrania informacji do wyświetlenia w witrynie mobilnej. Powiedziano mi, aby nie używać skryptu PHP jako serwera proxy, ponieważ spowodowałoby to dodatkowe niepotrzebne obciążenie serwera mobilnego (miliony użytkowników) i ściśle po stronie klienta. Używam następującego kodu:

var get_vars = "&callback=?&var=here";

$.ajax({
url: "http://server.com/script?" + get_vars,
type: "GET",
dataType: "jsonp",
//xhrFields: { withCredentials: true },
//crossDomain: true,
success: function(data){
console.log(data)
}
});

Serwer wykorzystuje uwierzytelnianie plików cookie dosprawdź, czy użytkownik jest zalogowany przed zwróceniem danych. O dziwo, ten kod działał raz w Firefoksie. Kolejne przeładowania / odświeżenia strony spowodowały, że poświadczenia nie zostały zweryfikowane przez serwer. Na początku myślałem, że było to spowodowane pewnymi zmianami w moim kodzie, ale po przetestowaniu go w Google Chrome działa w 100% przypadków. W konsoli Firefox / IE nie ma również błędów JS. Upewniłem się, że to nie jest problem z buforowaniem, a także wypróbowałem to na innym komputerze z Firefoksem, ale bezskutecznie. Ten problem występuje również na Windows Phone i najnowszej wersji Internet Explorera na Windows 8. Zakładam, że musi to być plik cookie powiązane i w jakiś sposób poświadczenia nie są przekazywane do zdalnego serwera.

Jeśli chodzi o próbę użycia CORS ... Próbowałem (jak widać skomentowane bity, a także próbowałem dodać $ .support.cors = true) i nie mogłem go uruchomić. Wciąż otrzymywałem błąd „nieautoryzowany” między domenami, pomimo posiadania serwera wyślij następujące nagłówki:

Access-Control-Allow-Credentials: true Access-Control-Allow-Origin: *

Czy ktoś ma jakieś pojęcie, co może być tego przyczyną? Chciałbym, aby to działało z JSONP, ponieważ działa już w Chrome.

Dodatkowe uwagi: Wygląda na to, że inny programista nie ma takich samych problemów jak ja. Zgłasza, że ​​działa w Firefoksie przez 100% czasu. Próbowałem nawet:

  • Ładowanie Firefoksa na maszynę wirtualną i napotkał te same problemy (aby upewnić się, że nie ma problemu z systemem operacyjnym)
  • Wyczyściłem pamięć podręczną na moim telefonie, wyłączyłem Wi-Fi i połączyłem osobnym adresem IP z tym samym problemem

Ugh. Zaczynam myśleć, że może to być po stronie serwera, chociaż nie jestem pewien, dlaczego tak się stanie, ponieważ działało w 100% dobrze, kiedy korzystałem z PHP.

Odpowiedzi:

0 dla odpowiedzi № 1

Wygląda na to, że zapomniałem zmienićmetoda, której użyłem do zalogowania się przez AJAX. Używałem metody JSONP tylko do połączeń danych po zalogowaniu. Wydaje mi się, że podczas korzystania z CORS dane cookie są oddzielone, więc zdalny serwer nie odczytuje poprawnie plików cookie.

TLDR; Nie mieszaj CORS i JSONP razem - upewnij się, że używasz jednego lub drugiego, aby upewnić się, że sam nie napotkasz tego problemu!