2016-07-07 2 views
2

Я пытаюсь сделать небольшое тестовое приложение, которое вызывает вызов 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, и, похоже, она работает так же хорошо, как и загрузка всего остального.

+0

@Homen Whitelist 1.2.2 и андроид 6.0 –

+0

@Homen ах, извините. Он говорит: «команда не найдена» Я предполагаю, потому что я никогда не устанавливал CLI правильно? Мне это действительно не нужно, если я использую PhoneGap Build? –

+0

В последнее время мы сталкиваемся с аналогичной проблемой. Если мы «подпишем» APK, он больше не получает доступ к сети. Если мы не подписываем APK, а все остальное - то же самое, приложение работает. То же приложение также работает (сетевое подключение), подписанное и неподписанное на IOS. Попытайтесь создать свое приложение на сборке телефонных звонков БЕЗ его подписания, чтобы преодолеть это препятствие. Я все еще пытаюсь выяснить причину. – DaShaun

ответ

1

Вы пробовали добавить раздел подключения-src к своей политике безопасности контента?Например:

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

Контролирует где Ajax запросы могут быть сделаны, обратитесь к документации на content-security-policy.com

+0

Yup, попробовал раньше, и дал еще один снимок, копируя ваш бит кода. еще ничего. –

1

Я рекомендую использовать JQuery, чтобы сделать Ajax просит его более управляемым и ремонтопригодны также он более легко сделать Ajax запрос с помощью JQuery

также вы можете отлаживать PhoneGap приложение и посмотреть, как Ajax запрос идет и вернуться на сервер и с сервера с помощью weinre удаленного отладчика вы можете следить за шаги, представленные в следующем уроке т сделать этот Weinre Remote Debugging Tutorial

Я надеюсь, что мой ответ был бы полезен

+0

Просто попробовал переключение приложения на использование jQuery. Еще раз. вызов jQuery ajax отлично работает, когда я тестирую его в своей системе, используя приложение для создания мобильных телефонов. Но когда я использую phonegap Build. мои аякс-вызовы моего скомпилированного приложения терпят неудачу. –

+0

Исправьте меня, если я ошибаюсь, но не Weinre для отладки моего веб-приложения до его компиляции? в то время как он все еще разрабатывается в браузере? а не как установленный файл APK. Если это правда, это не принесло бы мне много пользы, потому что мое приложение отлично готово. это происходит только после того, как я установил файл APK, который он перестает работать. –

+0

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

Смежные вопросы