Mam mobilną aplikację internetową zbudowaną przy użyciu następujących wersjach: -jQuery mobile + PhoneGap: Ajax połączeń nie działa na Android Emulator
- JQuery Telefony: alpha 4 v1.0a4.1
- JQuery: v1 .6.1
- PhoneGap: v0.9.5
Korzystanie PhoneGap, aplikacja ta jest wbudowana w natywnej aplikacji android i wdrażane.
W mojej aplikacji wykonuję różne wywołania AJAX za pomocą $ .ajax na zewnętrznych stronach internetowych. W tym celu korzystam z dataType: 'jsonp' inorder do wykonywania wywołań międzydomenowych.
Kiedy testowałem swoją aplikację w przeglądarce Chrome 12.0.742.100, wszystko działało dobrze i nie miałem problemów z pobieraniem danych z zewnętrznych stron. Jednak, gdy tylko spakuję to do pliku .apk i spróbuję uruchomić to w emulatorze, stwierdzam, że żadne z wywołań ajaxowych nie działa.
Położyłem alarmy przed i po wywołaniu ajax i zweryfikowałem, że oba alerty są wywoływane, ale wywołanie ajax jest tak dobre, jak ignorowane. Mam logowanie zarówno oddzwaniania powodzenia, jak i oddzwaniania po błędzie i żadne z nich nie jest osiągane. Sprawdziłem również, umieszczając punkt przerwania na zewnętrznej stronie serwera (dla mojego testowania, mam tylko oddzielną stronę na mojej lokalnej maszynie) i strona serwera zdecydowanie nie jest wywoływana.
W LogCat, błąd, że widzę to: D/SntpClient (59): czas Żądanie nie powiodło się: java.net.SocketException: Adres rodzina nie jest obsługiwana przez protokół
Jestem całkiem nowy do phonegap, a także Jquery Mobile, ale jak daleko sięga moje rozumowanie, mój plik aplikacji phonegap jest oznaczony przez file: /// protokół, podczas gdy mój adres URL AJAX jest http://127.0.0.1:someport/someapp/somepage i błąd wydaje się wskazywać, że te dwie dont wymieszać !! Jeśli tak jest rzeczywiście, jak mam wykonywać wywołania ajaxowe z wdrożonej aplikacji phonegap?
Proszę wskazać wszystko, co może być pomocne! Jestem w tym momencie bardzo zaskoczony.
Edytuj: Sprawdziłem plik AndroidManifest.xml i wszystkie uprawnienia określone w tym phonegap wiki link są ustawione w tym pliku.
Edit 2: Dodawanie w moim kodu po stronie klienta, który intitiates wywołania AJAX
var serverUrl = "http://localhost:2424/MyServer/RetrieveMasterData.aspx";
$.ajax({
url: serverUrl,
type: 'POST',
dataType: 'jsonp',
data: { MasterDataID: 1 },
success: function(response) {
...... business logic here
},
error: function(xhr, ajaxOptions, thrownError) {
...... error handling something here
}
});
Witam, czy dodano zezwolenie na połączenie z Internetem? – Francisc
Nie mam pojęcia, dlaczego działa na twoim chrome, ale nie na ur android. Ale jedno na pewno wiem, że ta sama polityka pochodzenia nie ma zastosowania do protokołu file: ///. – root
Czy możesz opublikować fragment kodu, który pokazuje problem. –