У меня мобильное веб-приложение, созданное с использованием следующих версий: -
- JQuery Mobile: Alpha 4 v1.0a4.1
- JQuery: v1.6.1
- PhoneGap: v0.9.5
Используя phonegap, это приложение встроено в нативное приложение для Android и развернуто.
В моем приложении я совершаю различные AJAX-звонки с использованием $ .ajax на внешние веб-сайты.
Для этого я использую функцию dataType: 'jsonp' для выполнения междоменных вызовов.
Когда я тестировал свое приложение в Chrome v12.0.742.100, все работало нормально, и у меня не было проблем с получением данных с внешних сайтов. Однако, как только я упаковал это в файл .apk и попытался запустить его в эмуляторе, я обнаружил, что ни один из вызовов ajax не работает.
Я поставил оповещения до и после вызова ajax и убедился, что оба оповещения вызваны, но вызов ajax так же хорош, как и проигнорированный. Я вошел в систему как обратного вызова успеха и обратного вызова ошибки, и ни один не достигается. Я также подтвердил это, установив точку останова на веб-сайте внешнего сервера (для моего тестирования у меня просто есть отдельный веб-сайт на моем локальном компьютере), и страница сервера определенно не вызывается.
В logcat я вижу следующую ошибку:
D / SntpClient (59): сбой времени запроса: java.net.SocketException: семейство адресов не поддерживается протоколом
Я довольно новичок в phonegap, а также в Jquery Mobile, но, насколько я понимаю, на мой файл приложения phonegap ссылается протокол file: /// , тогда как мой AJAX-URL http://127.0.0.1:someport/someapp/somepage и ошибка, кажется, указывает на то, что эти два не смешиваются !! Если это действительно так, как мне выполнить вызовы ajax из развернутого приложения phonegap?
Пожалуйста, не стесняйтесь указывать на что-нибудь еще, что может быть полезным! Я довольно озадачен на этом этапе.
Редактировать: Я проверил файл AndroidManifest.xml, и все разрешения согласно этой вики-ссылке установлены в этом файле.
Редактировать 2: Добавление в мой клиентский код, который инициирует вызов ajax
var serverUrl = "http://localhost:2424/MyServer/RetrieveMasterData.aspx";
$.ajax({
url: serverUrl,
type: 'POST',
dataType: 'jsonp',
data: { MasterDataID: 1 },
success: function(response) {
...... business logic here
},
error: function(xhr, ajaxOptions, thrownError) {
...... error handling something here
}
});