【发布时间】:2014-08-25 13:32:56
【问题描述】:
我在使用 Cordova 时遇到了一个相当令人沮丧的问题,并且 AJAX 请求在我的桌面/移动浏览器上查看时可以工作,但它根本不会从使用 Cordova 的应用程序内部触发。
我的 AJAX 调用包含在我从 HTML 页面链接到的 JS 文件中,即:
var DSUser = '4';
var urlLink = 'http://localhost/cwwa/web/app.php/ajax/' + DSUser + '/options/';
$.ajax({
type: 'GET',
url: urlLink,
dataType: 'jsonp',
crossDomain: true,
contentType: 'application/json',
success: function(data) {
alert('AJAX Works');
var divsel = $('#divisionSelect');
divsel.empty();
var DivisionList = (data.divisions);
divsel.append('<option value ="0">All Sites</option>');
$.each(DivisionList, function(i, item){
divsel.append('<option value ="' + DivisionList[i].division + '">' + DivisionList[i].division + '</option>');
});
}
});
这应该做的是在 HTML 下拉菜单中添加很多选项。然而,这不会发生。我在 Success 中添加了一个 alert("works") ,它不会触发。所以 AJAX 调用出错了。
我将此代码添加到 AJAX 调用中:
error: function(req, err){
console.log(err);
}
在 Android Studio 中返回有用的错误(interact.js 是 AJAX 调用所在的位置):
I/chromium: [INFO:CONSOLE(53)] "error", 来源: file:///android_asset/www/js/interact.js (53)
我已将 URL 放入浏览器,它会返回我应该期待的 JSON 数组。在此应用将使用的网站上使用相同的 AJAX 调用,因此在大多数情况下,AJAX 调用本身不是问题。
我在互联网上了解到您需要授予 Android 访问互联网的权限。我也将它包含在我的 AndroidManifest.xml 文件中:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<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" />
仍然完全不喜欢它。
【问题讨论】:
-
您是否尝试使用本地计算机和通过 USB 连接到本地计算机的设备进行测试?你的声明
urlLink = 'http://localhost/...让我假设这一点。如果是这样,则设备上看不到localhost。我与另一位编码员进行了类似的对话(请参阅[此处])(stackoverflow.com/questions/24840771/…),如果它解决了您的问题,您可以查看。 -
将 localhost 更改为 ip 地址
标签: javascript android jquery ajax cordova