我们在Android 4.0,4.1和4.2上遇到了内置浏览器的问题(我们没有更低的东西可以测试)。 问题是ajax调用在第一次加载时会完美运行,你可以根据需要多次按下运行Ajax按钮,这样就可以了。您可以断开互联网连接,它将正常工作。 但是如果您退出(完全确保它不仅仅在后台运行)浏览器然后重新启动它,它将在加载时失败并按下按钮。如果您在线或离线并不重要。 从ajax调用返回的错误是“Error”,status = 0且readyState = 0 当它成功时,你会收到一条消息,说“从Ajax Call调用”,状态= 200,readyState = 4。
代码可以在我们在Android Chrome,Firefox和Opera上测试过的其他浏览器上找到。在IOS 5和6上它可以工作,我们可以找到每个桌面浏览器。 有没有我遗漏的内容或者我们在内置浏览器中发现了一个错误。任何有关这方面的帮助都会受到欢迎,特别是如果它只是我做过的蠢事。
我们已经创建了一个测试脚本,可以很好地演示此问题,我已将其附加到此消息的底部。
由于
添
test.php的
<?php
function displayPage() {
?>
<!DOCTYPE html>
<html manifest="test.manifest" debug="true">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1" >
<title>test</title>
<script type="text/javascript" src="jquery-1.9.0.min.js"></script>
<script type="text/javascript">
function runAjaxGet() {
var XMLHttpRequest = $.ajax({
url: "test.php",
dataType: "json",
data: "test=test",
traditional: "true",
success: function( responseData ) {
alert('good\n responseData: '+responseData+ '\n res:' + XMLHttpRequest.responseText +'\n readyState: '+ XMLHttpRequest.readyState + '\n Status: '+XMLHttpRequest.status );
console.log(XMLHttpRequest);
},
error: function (xhr, ajaxOptions, thrownError, responseData) {
alert('bad\n responseData: '+responseData+ '\n res:' + XMLHttpRequest.responseText +'\n readyState: '+ XMLHttpRequest.readyState + '\n Status: '+XMLHttpRequest.status);
console.log(XMLHttpRequest);
}
});
}
$(document).ready(function() {
runAjaxGet();
});
</script>
</head>
<body>
<button Name="Run Ajax" onclick="runAjaxGet();">Run Ajax</button>
</body>
</html>
<?php
}
function processRequests() {
header("Content-Type: application/json; charset=UTF-8" );
echo (json_encode("respose from Ajax Call"));
}
date_default_timezone_set ( "UTC" );
if (isset($_REQUEST['test'])) {
$which = $_REQUEST['test'];
} else {
$which = '';
}
switch ($which) {
case "test":
processRequests();
break;
default :
displayPage();
break;
}
?>
test.manifest
CACHE MANIFEST
test.php
jquery-1.9.0.min.js
test.php?test=test
答案 0 :(得分:0)
只需添加带有星号的NETWORK部分即可使用
CACHE MANIFEST
test.php
jquery-1.9.0.min.js
test.php?test=test
NETWORK:
*
答案 1 :(得分:0)
我遇到了同样的问题,并确定从缓存中检索时,0表示成功。这可能是因为没有涉及实际的http请求,因为请求是完全在本地解决的。
Appcache清单文件:
CACHE MANIFEST
CACHE:
/config
使用Javascript:
var request = new XMLHttpRequest();
request.open('GET', '/config', false); // async=false is ok because this file will always come from AppCache
request.send(null);
// Older versions of android return 0 when ajax request retrieved from appcache
if (request.status == 200 || request.status == 0) {
return JSON.parse(request.responseText);
} else {
console.log("ERROR: config not retrievable");
throw "Attempt to retrieve config return http status " + request.status;
}