Ajax请求适用于浏览器,但不适用于Android设备
Ajax request works on browser but not on Android device
我正在用Cordova制作一个简单的移动应用程序。当我在浏览器中测试它时,我的代码工作得很好,但是当在Android手机上测试时,它忽略了成功函数,并直接从db.js打印错误消息。
这里是相关的索引。html
<body>
<div class="app">
<h1></h1>
<div id="deviceready" class="blink">
<div>
<div id="output"></div>
</div>
</div>
</div>
<script type="text/javascript" src="cordova.js"></script>
<script type="text/javascript" src="js/jquery-2.1.4.min.js"></script>
<script type="text/javascript" src="js/index.js"></script>
<script type="text/javascript" src="js/db.js"></script>
</body>
db.js与ajax函数
$(document).ready(function() {
$(document).bind('ready', function() {
var output = $('#output');
$.ajax({
url: 'http://domainName/server/folder/db.php',
dataType: 'jsonp',
jsonp: 'jsoncallback',
timeout: 5000,
success: function(data, status){
$.each(data, function(i, item){
var cards = '<h1>' + item.title + '</h1>' + item.body
+ '<br>' + '<img src="img/' + item.slug + '.jpg"' + '>' + '<br>' ;
output.append(cards);
});
},
error: function(){
output.text("There was an error loading the data.");
}
});
});
});
db.php
<?php
header('Content-type: application/json');
$host = 'hostname';
$dbname = 'database';
$user = 'username';
$pass = 'passoword';
$jsoncallback = isset($_GET['jsoncallback'])? $_GET['jsoncallback'] : "";
$con = mysql_connect($host, $user, $pass) or die("Could not connect: " . mysql_error());
mysql_select_db($dbname, $con);
$sql = "SELECT * FROM cards";
$result = mysql_query($sql) or die("Query error: " . mysql_error());
$records = array();
while($row = mysql_fetch_assoc($result)) {
$records[] = $row;
}
mysql_close($con);
echo $jsoncallback . '(' . json_encode($records) . ');';
所有域名均已加入白名单:
<access origin="*" />
Android manifest中的权限:
<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.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
任何想法?
你试过把你的代码放在devicereready吗?假设您的html起始索引文件如下所示,
<html>
<head> </head>
<body onload="onBodyLoad()" >
</body>
</html>
和你的脚本文件如下所示:
<script>
function onBodyLoad() {
document.addEventListener("deviceready", onDeviceReady, false);
}
function onDeviceReady() {
// do your thing here!
}
</script>
我用Phonegap(而不是Cordova)构建了一个新项目。其他代码完全相同。
相关文章:
- HTML5 Canvas toDataURL(“image/png”)适用于一些绘画,而有些则不然,不确定原因
- JavaScript不显示剩余字符,但适用于其他页面
- 我如何完善这个Javascript代码,使其只适用于来自图像的链接(而不是来自文本的链接)
- 为什么这只适用于身体部分而不是头部
- 为什么不't此正则表达式适用于重复出现的对
- document.getElementById 对内部 html 的调用适用于 $_POST 和 $_GET 变量,但不
- JavaScript 位置适用于本地主机而不是服务器
- Rally App SDK 2.0:Rallymultiobjectpicker,适用于不显示displayField的
- jQuery事件在Mozilla上不起作用,并且适用于其他浏览器
- Angular.js - 控制器不为索引执行,适用于其余模板
- D3 .on 更改适用于文本而不是图表
- Zillow 数据 - json_encode不起作用 - 适用于常规变量
- 弹出模式仅适用于表格中的第一个元素,第二次单击后不会再次打开
- Phonegap Android项目适用于模拟器,而不是实际的手机
- ajax jonp 不应该适用于 请求的上不存在“访问控制-允许源”标头
- AngularJS:ng-单击不起作用,适用于<按钮>
- Javascript不会在移动设备上加载.适用于桌面
- 为什么我的代码适用于高度:100px,而不是高度:100%
- 拖放区.js + Laravel-多文件上传不起作用(仅适用于一个文件)
- 哪些限制适用于不透明响应