![](/img/trans.png)
[英]Phonegap on Android XmlHttpRequest Works in Emulator & browser, Not on Device
[英]Ajax request works on browser but not on Android device
我正在用Cordova制作一个简单的移动应用程序。 当我在浏览器中进行测试时,我拥有的代码可以完美运行,但是在Android手机上进行测试时,它会忽略成功功能,并直接打印db.js中的错误消息。
这是相关的index.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>
带有ajax函数的db.js
$(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清单中的权限:
<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" />
有任何想法吗?
您是否尝试过将代码放入设备就绪状态? 假设您的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)构建一个新项目来使其工作。 否则,完全相同的代码。 仍然不知道为什么它不能与Cordova一起使用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.