Подтвердить что ты не робот

JQuery AJAX POST не работает с Phonegap Build

У меня возникла проблема с выполнением JQuery AJAX POST в Android-приложении с использованием Phonegap Build. Я добавил:

  • Config.xml: установить источник доступа *
  • Все файлы HTML: установите $.support.cors = true; $.mobile.allowCrossDomainPages = true;
  • На удаленном сервере: установите значения для Access-Control-Allow-Origin, Access-Control-Allow-Headers

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

Вот что я пытаюсь сделать:

$.ajax({
  type: "POST",
  url: "http://mydomain.com/mypage.aspx/myweb...",
  data: "{'sEnquiryText':'" + $("#textareaEnq")[0].value + "'}",
  contentType: "application/json; charset=utf-8",
  dataType: "json",
  success: function(data) { // Response function
    if (data.d == "Success")
      $("#lblInfoMsg").html("Enquiry sent successfully !");
    else
      $("#lblInfoMsg").html(data.d);
  }
});

Это прекрасно работает как веб-приложение, если оно установлено в другом домене (myseconddomain.com/mywebapp), а также локальный IIS (localhost/mywebapp). Но это не работает на Android-приложении, созданном с помощью Phonegap Build.

Если кто-то мог бы рассмотреть этот вопрос, я был бы очень признателен.

4b9b3361

Ответ 1

Вам нужно добавить "res/xml/config.xml", например,

<access origin="http://127.0.0.1*"/> <!-- allow local pages -->

<access origin="https://example.com" />

<access origin="https://example.com" subdomains="true" />

<access origin=".*"/>

Ответ 2

Ответ, который я завершил после многих часов, заключается в том, что XHReq POST не поддерживается внутри Android WebView, по крайней мере, в настройке по умолчанию PhoneGap на устройстве Android 4.03, которое я использую; tcpdump показывает, что запрос действительно выходит из устройства, для правильного хоста и пути, но как GET, без сообщений. Я проверил белый список (по умолчанию в телефоне по умолчанию "*", поэтому не проблема), удостоверился, что это не проблема "кеширования POST" (добавив? T = в URL-адрес запроса) и убедился, что я делаю только асинхронные запросы, Тот же результат; POST выводится как GET, и все данные после публикации теряются.

Мое решение состояло в том, чтобы переключиться на использование GET для этой функции, чтобы избежать необходимости отправлять почтовые данные через URL-адреса, такие как http://mydomain.com/endpoint?post-data=url-encoded-data-here&t=timestamp-here ". Это было возможно только потому, что я также контролировал его сервер, меняя конечную точку, чтобы разрешить ранее выполняемую POST-операцию над GET, если данные были встроены таким образом.

ОБНОВЛЕНИЕ: я вернулся к этой проблеме, так как мне действительно хотелось, чтобы POST работал по другим причинам (см. сообщение # 21192670).

Причина, по которой POSTs терпела неудачу, была связана с конфигурацией MX моего домена и выбором (или отсутствием) поддомена в его ссылке; Я использовал корневой домен в URL-адресе POST, но запись MX имела это указание на wwww.mydomain.com, который затем указывал на правильный IP-адрес. POST не прошел через это перенаправление.