Intereting Posts
Как проверить подключение к Интернету в сети в Android (используя интернет другого устройства через HOTSPOT) Легкий способ скрыть системную панель на Android ICS Включение поддержки SMS в Hangouts 2.0 приводит к перерыву BroadcastReceiver SMS_RECEIVED в моем приложении Почему ContentObserver вызывается несколько раз? Как создать навигационный ящик без поддержки библиотеки Ant не перестраивает Android-приложение с помощью `ant debug install` Как добавить элементы в spinner в Android? Сохраняются ли фрагменты с setRetainInstance (true) при остановке процесса? Элементы списка просмотра Анимация Стоп Во время прокрутки Android: используйте UUID в качестве первичного ключа в SQLite Не удалось открыть выбранный порт отладки VM (8700) Переход общего элемента Android: просмотр героя обращается перед другим Как получить содержимое веб-страницы из WebView? Как программно установить атрибут стиля в представлении Удалите лишние строки после Html.fromHtml ()

Phonegap Кросс-домен AJAX POST Запрос не работает на Android

Кросс-доменный запрос AJAX POST отлично работает на веб-браузерах, включая браузеры на мобильных телефонах, но не работает для собственных приложений, созданных с помощью Phonegap

Я создал регистрационную форму, в которой пользователи должны ввести свои учетные данные для входа, затем они проверяются сервером, который размещен на геройке, и возвращает json {"success":true} если введены действительные учетные данные.

Мой сценарий Ajax:

 $.ajax({ type: "POST", url: "http://domain.com/public/auth/app-login", contentType: "application/x-www-form-urlencoded; charset=utf-8", dataType: "json", data: {identity: <username from form>, password: <password from form>}, crossDomain: true, cache: false, success: function(data) { obj = JSON.parse(data); if (obj && obj.success === true) { window.location.href = 'home.html'; } }, error: function(e) { alert('Error: ' + e.message); } }); 

Шаги, предпринятые для решения этой проблемы:

  • Локальный домен – config.xml

<access origin="http://domain.com/public/auth/app-login" />

<access origin="*" />

  • Указание jQuery для разрешения междоменного

$.support.cors = true; ИЛИ jQuery.support.cors = true;

  • Отключить кеширование cache: false

Любая помощь приветствуется.

Solutions Collecting From Web of "Phonegap Кросс-домен AJAX POST Запрос не работает на Android"

ОК. Если index.html в local, то вы можете вызывать ajax на любых хостах, не нужно включать CORS в клиент или сервер. Вы удаляете:

 $.support.cors = true; OR jQuery.support.cors = true; 

А также:

 <access origin="http://domain.com/public/auth/app-login" /> 

Он избыточен, используйте только:

 <access origin="*" /> 

Вам нужно проверить и добавить в AndroidManifest.xml:

 <uses-permission android:name="android.permission.INTERNET" /> 

Добавьте дополнительное разрешение, если требуется ваше приложение. Наконец, вызовите ajax внутри $ (document) .ready ():

 $.ajax({ type: "POST", url: "http://domain.com/public/auth/app-login", dataType: "json", data: {identity: <username from form>, password: <password from form>}, success: function(data) { obj = JSON.parse(data); if (obj && obj.success === true) { window.location.href = 'home.html'; } }, error: function(e) { alert('Error: ' + e.message); } }); 

Если вы хотите решить эту проблему, вы можете убедиться, что плагин правильно включен в процесс сборки.

 RESOURCE: \app\config.xml <widget> .... [lots of stuff] .... <gap:plugin name="com.indigoway.cordova.whitelist.whitelistplugin" /> <access origin="http://*" /> .... </widget> 

Вы также можете указать версию, рекомендованную, и я не укажу ее выше. Хороший способ проверить, включен ли плагин, – использовать бесплатную учетную запись облака, указанную на странице https://build.phonegap.com/apps . Если вы создадите свой проект там, вы можете проверить вкладку плагинов и убедиться, что включен белый плагин.

Я прочитал, что вам нужно только это в элементе HEAD вашей HTML-страницы, но я нашел на дату этого сообщения, что мне все еще нужно включить плагин.

 <meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'"> 

Если плагин не загружен, вы можете получить ошибку «Не найден» при использовании метода $.ajax для jQuery для строки ошибки.

Некоторая информация в Интернете сообщит вам, что информация о белом списке помещается в папку /www/res/ , но это, как представляется, является устаревшей информацией. Вы также можете обнаружить, что <plugin... используется в некоторых примерах, но кажется, что это может быть устаревшим способом?

Кроме того, вам может потребоваться:

 RESOURCE: \app\config.xml <widget> ... <feature name="http://api.phonegap.com/1.0/network"/> ... </widget> 

использование

 JSON.stringify(data: {identity: <username from form>, password: <password from form>}) 

Вместо data: {identity: <username from form>, password: <password from form>}

Я получил сообщение о успехе, когда я изменил свой код, как это.

Некоторое время в вашем домене возникает проблема. В моем случае я решил это, поместив следующий код в мой .htaccess файл

 <IfModule mod_headers.c> Header set Access-Control-Allow-Origin "*" </IfModule>