Tworzę aplikację PhoneGap na Androida. Aby uzyskać dane z (zdalnego) serwera, wykonuję wywołanie REST, używając funkcji $ .ajax() jQuery. Jest kilka rzeczy, które trzeba wiedzieć:Żądania między domenami za pomocą PhoneGap i jQuery nie działają
- Rodzaj połączenia muszą być POST
- Serwer oczekuje danych JSON (przynajmniej nazwa użytkownika i hasło)
- serwer odsyła dane JSON
Kod:
function makeCall(){
var url = "http://remote/server/rest/call";
var jsonData ='{"username":"'+$('#username').val()+'","password":"'+$('#password').val()+'"}';
$.ajax({
headers: {"Content-Type":"application/json; charset=UTF-8"},
type: "POST",
url: url,
data: jsonData,
dataType: "json",
success: succesFunction,
error: errorFunction
});
}
Ale to nie działa. Kiedy używam Firebuga, aby zobaczyć reakcję serwerów, nie ma nic. Dzięki TcpTrace mogę zobaczyć nagłówki żądania. Zamiast oczekiwanej metody POST istnieje metoda OPTIONS z dodanymi dziwnymi nagłówkami.
OPTIONS /remote/server/rest/call HTTP/1.1
Host: localhost:8081
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:11.0) Gecko/20100101 Firefox/11.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: nl,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Origin: null
Access-Control-Request-Method: POST
Access-Control-Request-Headers: content-type
Pragma: no-cache
Cache-Control: no-cache
Wiem, że ma to coś wspólnego z żądaniami międzydomenowymi, ale nie wiem, jak rozwiązać problem. Próbowałem kilka rzeczy, aby go naprawić, ale bez skutku:
- Użyj „jsonp” w zastępstwie „json”
- spróbuje użyć Cross-Origin Resource Sharing (CORS)
Problem ma też coś wspólnego z tą samą zasadą pochodzenia, ale nie dotyczy to protokołu file: // PhoneGap używa do załadowania lokalnego pliku html.
W moim pliku AndroidManifest.xml opcja
<uses-permission android:name="android.permission.INTERNET" />
jest ustawiony.
Próbuję rozwiązać ten problem przez 2 dni, ale bez rezultatu do teraz. Czy to możliwe? Czy masz jakieś wskazówki, abym mógł przejść dalej?
Z góry dziękuję!
Twój problem może zostać naprawiony, ale to nie jest odpowiedź na pytanie, co rozwiązało problem z żądaniem między domenami. – Asqan