Я пытаюсь сделать небольшое тестовое приложение, которое вызывает вызов AJAX. Когда я запускаю его, используя сервер PhoneGap Desktop и приложение для разработчиков Android. все работает нормально. Но когда я использую PhoneGap Build для компиляции приложения, установите .apk на свой телефон. вызов AJAX терпит неудачу.PhoneGap Сборка: AJAX не работает
Я прочитал все, чтобы попытаться найти решение моей проблемы. похоже, есть много людей, имеющих эту проблему, но пока я не смог ее исправить. Самая распространенная вещь, которую я вижу, говорит, что это проблема с «белым». Но мой файл config.xml содержит ...
<plugin name="cordova-plugin-whitelist" source="npm" spec="~1.2.1"/>
, а также ...
<access origin="*"/>
<allow-intent href="http://*/*"/>
<allow-intent href="https://*/*"/>
И мой СНТ выглядит так ...
<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'">
Который согласно Cordova documentation должен позволить AJAX.
Мое приложение очень простое. Она имеет кнопку, которая вызывает мою функцию AJAX и передает некоторую информацию, чтобы отправить на сервер, а также функцию обратного вызова ...
<button onclick="serv('init',ajaxer)">BUTTON</button>
Вот мой JS файл:
function ajaxer(resp){
var e = document.getElementById("test");
e.innerHTML="responded...";
if(resp.go){
e.innerHTML="IT WORKED!";
}else{
e.innerHTML="foo";
}
}
function serv(request,returnFunc,parameters) { //SEND AND RECEIVE ALL SERVER INFO
document.getElementById("test").innerHTML="sending info...";
var query="";
var serverObject;
if(window.XMLHttpRequest){
serverObject = new XMLHttpRequest();
}else{
serverObject = new ActiveXObject("Microsoft.XMLHTTP");
}
serverObject.goto = returnFunc;
serverObject.onreadystatechange = function() {
if(serverObject.readyState==4&&serverObject.status==200){
var serverResponse = JSON.parse(serverObject.responseText);
serverObject.goto(serverResponse);
}
};
if(parameters){
query="&"+parameters;
}
serverObject.open("POST", "http://tylermackenzie.duckdns.org/phoneGap%20Test/server.php", true);
serverObject.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
serverObject.send('qType='+request+query);
}
Когда я нажимаю кнопка, он отображает текст «отправка информации ...», но никогда не переключает его на «ответ ...» или «ЭТО РАБОТАЕТ!». или "foo". что означает, что ajaxer() никогда не вызывался.
Я не могу понять, почему он не работает. Как я упоминал ранее. он отлично работает, когда я использую приложение разработчика phoneGap. И у меня отключен телефон, когда я тестирую его. Поэтому я знаю, что телефон находится в другой сети, а затем на сервере, потому что телефон должен использовать мобильную сеть. Если это просто проблема с белым списком, не должна ли она иметь такую же проблему, когда я тестирую ее с помощью приложения-разработчика?
Кроме того, я знаю, что это не проблема с моим сервером, потому что он отлично реагирует, когда я тестирую приложение разработчика, и когда я перемещаюсь туда вручную.
Надеясь, что кто-то может мне помочь.
Сложение
может это что-то делать с моей файловой структурой, что я загружаю в PhoneGap построить? Я просто использовал базовое приложение «hello world», которое создает приложение PhoneGap Desktop. И отредактировал html и js, чтобы создать небольшое тестовое приложение.
Это немного запутанно для меня, потому что в AppName/www есть index.html, а также AppName/platform/browser и под AppName/platform/browser/www. Почему все файлы втрое? Я пытался сделать все три копии одинаковыми. похоже, не имеет никакого значения.
Я где-то читал, что мне нужно загрузить папку AppName/www в PhoneGap Build, и, похоже, она работает так же хорошо, как и загрузка всего остального.
@Homen Whitelist 1.2.2 и андроид 6.0 –
@Homen ах, извините. Он говорит: «команда не найдена» Я предполагаю, потому что я никогда не устанавливал CLI правильно? Мне это действительно не нужно, если я использую PhoneGap Build? –
В последнее время мы сталкиваемся с аналогичной проблемой. Если мы «подпишем» APK, он больше не получает доступ к сети. Если мы не подписываем APK, а все остальное - то же самое, приложение работает. То же приложение также работает (сетевое подключение), подписанное и неподписанное на IOS. Попытайтесь создать свое приложение на сборке телефонных звонков БЕЗ его подписания, чтобы преодолеть это препятствие. Я все еще пытаюсь выяснить причину. – DaShaun