Запрос AJAX с телефона Android
Я работаю над этим в течение последних двух дней и рассматриваю множество других предложений. Да, я могу получить этот простой запрос ajax для работы из приложения phonegap, как на эмуляторе Android, так и на реальном телефоне Android.
Моя телефонная версия (с помощью phonegap -v) 3.0.0-0.14.3
Используемый мной код:
var url = 'http://www.thomas-bayer.com/sqlrest/CUSTOMER';
return $.ajax({
type: "GET",
url: url,
timeout: 60 * 1000
}).done(function (data) {
alert('hey');
}).fail(function (a, b, c) {
console.log(b + '|' + c);
});
Результат, который я получаю в журнале:
ошибка | в файле:///android_asset/www/js/index.js: 62
Я добавил настройки в AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
и у меня есть следующее в Config.xml
<param name="android-package" value="org.apache.cordova.core.NetworkManager" />
Когда я проверяю navigator.connection.type
, я получаю 3G
в эмуляторе и wifi
на физическом телефоне.
Любая идея, что еще может пойти не так?
UPDATE:
Если я зарегистрирую JSON в первом параметре неисправной функции, я получаю:
{"readyState":4,"status":404,"statusText":"error"}
Ответы
Ответ 1
Вы должны whitelist домен, чтобы ваши вызовы AJAX работали.
Добавьте эту строку в файл конфигурации -:
<access origin="*" />
Политика по умолчанию для Phonegap блокирует весь доступ к сети, если не указано иное. Вышеуказанная строка отключит это ограничение безопасности. Вы также можете быть более конкретным, позволяя только определенным доменам обойти эту функцию безопасности, включая имя домена в файле конфигурации, например:
<access origin="http://yourdomain" />
Ответ 2
дополнительно к белым спискам, убедитесь, что флаг cors верен, чтобы разрешить совместное использование ресурсов на основе Cross.
$.support.cors=true;
найдите ссылку здесь
Ответ 3
У меня был URL-адрес localhost, когда я использовал Visual Studio.
Я решил, отредактировав файл VShost Applicationhost.config и создав версию протокола привязки, так что это: port: not *: port: localhost, а затем доступ через ip-адрес.
Не забудьте получить все ссылки на порт.