2016-02-08 3 views
1

У меня проблемы с cordova/phonegap/ajax с веб-страницы. Поскольку приложение работает с phonegap разработчиком-приложением, работающим по телефону и отлично передает ajax requests. Я думаю, что это как-то связано с permissions/plugins. Но при установке приложения с помощью cordova он ничего и целые ajax request возвращается не отправить:Телефонная связь AJAX запрос undefined

readyState: 0 
responseText: undefined 
status: 0 
text status: error 
error 

В config.xml Я установил

<access origin="*" /> 

и AndroidManifest.xml I'v набор

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

Вот ajax request сам

$.ajax({ 
    method: "GET", 
    crossDomain: true, 
    dataType: 'json', 
    url: 'http://mywebsite.com/projectname/index.php', 
    data: { x: userLocation.latitude, y: userLocation.longitude }, 
    success: function(data){ 
     alert("Success: "+ data); 
    }, 
    error: function(xhr, textStatus, err) { 
     alert("readyState: " + xhr.readyState); 
     alert("responseText: "+ xhr.responseText); 
     alert("status: " + xhr.status); 
     alert("text status: " + textStatus); 
     alert("error: " + err); 
    } 
}); 

В том числе cordova.js в проекте:

<script type="text/javascript" src="cordova.js"></script> 
<script src='js/jquery.js'></script> 
<script> 
    $(document).bind('mobileinit', function() { 
     $.mobile.changePage.defaults.changeHash = false; 
     $.mobile.hashListeningEnabled = false; 
     $.mobile.pushStateEnabled = false; 
    }); 
</script> 
<script ...here comes js file where ajax is called out 

Установка этих не работает либо

$.support.cors = true; 
$.mobile.allowCrossDomainPages = true; 

ответ

0

Если вы работаете в Кордову 5 или более поздней версии, вы будете нуждаться в Content Security Policy мета-тег ваш HTML, чтобы сделать запросы Ajax внешним серверам. Если вы начали с более старой версии Кордовы и обновились до 5 или 6, вероятно, ваш index.html не имел бы в ней одного из них. Если вы запустили новое приложение Cordova 5 или 6 из CLI, тогда у шаблона «Кордова готово» приложение будет иметь один, но предоставленный образец не разрешает Ajax-запросы другим серверам, если вы явно не настроили его.

Вы можете добавить что-то вроде этого в ваш index.html, чтобы Ajax запросы в любом месте:

<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *; connect-src http://api.fixer.io"> 

В качестве альтернативы рассмотрим, как настроить на соединение-Src в content-security-policy.com или мой блог here настроить жесткий ПСУ что соответствует вашим потребностям.

Кроме того, вы можете использовать событие «deviceready» в Кордове, а не «mobileinit», так как вы можете сделать свой вызов Ajax слишком рано, прежде чем Кордова будет полностью готова, так что ваш Ajax-вызов в (onDeviceReady) обратном вызове :

document.addEventListener('deviceready', this.onDeviceReady, false); 

или что-то, что выполняется после того, как оно было вызвано, с указанием, что Кордова готова.

0

По-видимому, мне потребовалось достаточно времени, чтобы понять это, поэтому я понял, как это работает: Сначала я удалил все плагины из проекта, а затем удалил платформы для папок/android. В CMD, набранном в:

cordova platform add android 

А затем снова установлены необходимые плагины. Теперь он работает.

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