Я переношу ajaxed, оптимизированный для мобильных устройств веб-сайт в PhoneGap, но не смог получить POST на сервере. Из того, что я прочитал, в PhoneGap предполагаются возможности POSTS xhreq.Данные XMLHttpRequest PhoneGap приложения потеряны
Особенности: Я нацелен на платформу Android, используя последнюю версию Cordova 3.3.1-0.1.2, новейший Android SDK и Galaxy S3, обновленный Verizon до Android 4.3. Подключение к Wi-Fi на моем локальном сервере. В каждой попытке POST приходит на сервер как GET, без сообщений (проверяется с помощью tcpdump для проверки пакетов). Веб-сайт, оптимизированный для мобильных устройств, отлично работает в браузере на одном телефоне, а также через Wi-Fi.
Я изолировали случай потерпеть неудачу, создав новый проект PhoneGap, не более чем:
$ cordova create Hello
$ cd Hello
$ cordova platform add android
Тогда в index.js, в конце onDeviceReady обработчика, добавив фрагмент кода я впервые опробован в простой странице браузера (домен замещен здесь):
// TEST POST CAPABILITY
var req = new XMLHttpRequest();
req.onreadystatechange = function() {
if (req.readyState==4 && (req.status==200 || req.status==0)) {
console.log("POST Response: " + req.responseText);
}
};
var t = new Date().getTime(); // Just to foil any caching
req.open("POST", "http://mydomain.com/services/rpc?t=" + t, true); // async
req.setRequestHeader('Content-type','application/text; charset=utf-8');
var postContent = JSON.stringify({id:t, method:"misc.log", params:[{log:"POST Test"}]});
req.send(postContent);
, а затем запустить на телефоне с:
$ cordova run android
Он терпит неудачу, как более полное приложение, прибывающее на сервер как GET без данных сообщения. Я проверил несколько элементов конфигурации по умолчанию, чтобы убедиться, что они были необходимы:
В config.xml:
<access origin="*" />
В AndroidManifest.xml:
<uses-permission android:name="android.permission.INTERNET" />
Любые идеи относительно того, что может что-то не так, или другие вещи, на которые нужно смотреть?
Спасибо.
Я считаю, что, поскольку клиент и сервер не находятся в том же домене, у вас возникают проблемы с CORS. Это требует использования jsonp, но jsonp будет разрешать только запросы GET. – Tom
Клиент в приложении phonegap на самом деле является файловой системой, поэтому, естественно, серверный домен всегда будет отличаться от того, что я могу найти в документах PhoneGap и разных сообщениях, они обрабатывают эту проблему через конфигурацию, по умолчанию разрешая всем доменам (как указано выше). Просто для ударов я попробовал (временно) изменить серверную сторону, чтобы что-то позволить, добавив: // Просто тестирование, пытаясь заставить работать PhoneGap RPC ... response.setHeader («Access-Control-Allow-Origin», * "); response.setHeader («Access-Control-Allow-Methods», «GET POST»); –
Я только что заметил сообщение # 15260609, которое не является специфичным для PhoneGap, но похожее в аспекте «POST превращается в GET с отброшенным контентом». Я попробовал решение там (заканчивая URL-адрес косой чертой), но он не исправил вопрос. Интересно, может ли быть какая-то другая причина подобной «повторной попытки с GET». –