Я создаю приложение PhoneGap для Android. Чтобы получить данные с (удаленного) сервера, я делаю вызов REST с помощью функции $ .ajax() jQuery. Есть несколько вещей, которые вы должны знать:Запросы кросс-домена с использованием PhoneGap и jQuery не работают
- Тип вызова должен быть POST
- Сервер ожидает данные в формате JSON (по крайней мере, имя пользователя и пароль)
- Сервер отправляет обратно данные JSON
код:
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
});
}
Но это не работает. Когда я использую Firebug, чтобы увидеть ответ сервера, ничего нет. С TcpTrace я могу видеть заголовки запроса. Вместо ожидаемого метода POST существует метод OPTIONS с добавлением некоторых странных заголовков.
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
Я знаю, что это как-то связано с выполнением междоменных запросов, но я не знаю, как решить проблему. Я попробовал несколько вещей, чтобы исправить это, но без результата:
- Используйте «JSONP» в вместо «JSON»
- Попробуйте использовать Cross-Origin Resource Sharing (CORS)
Проблема имеет также что-то делать с той же политикой происхождения, но это не относится к файлу: // протокол PhoneGap используется для загрузки локального файла html.
В моем файле AndroidManifest.xml, опция
<uses-permission android:name="android.permission.INTERNET" />
установлен.
Я пытаюсь исправить это в течение 2 дней, но до сих пор нет результата. Можно ли это сделать? У вас есть какие-то советы для меня, чтобы я мог двигаться дальше?
Заранее благодарен!
ваша проблема может быть исправлена, но это не тот ответ, который решает проблему междоменного запроса. – Asqan