我已经在webserver中的网页上实现了一个简单的AJAX帖子(通过JS XmlHttpRequest对象)。
但是,我在Android OS 2.X中的默认浏览器上发现了一个奇怪的症状/问题 也就是说,如果由于某种原因,网络服务器有足够长的延迟回复(可以通过在网页中硬编码Thread.Sleep来模拟),浏览器会自动将相同的请求重新发布到网络服务器在等待期间再次。
<script type="text/javascript">
$(document).ready(function() {
PerformRequest();
});
function PerformRequest() {
appendMessage('PerformRequest... ');
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("POST", "http://localhost/DelaySite/Default.aspx", true);
xmlhttp.onreadystatechange = function()
{
appendMessage("xmlhttp.readyState: " + xmlhttp.readyState, true);
appendMessage("xmlhttp.status: " + xmlhttp.status, true);
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
// successful response
}
}
xmlhttp.send();
}
</script>
有没有人在Android浏览器中看到此问题?如果是这样,有没有人知道原因?
这不是一个安全问题吗?考虑如果移动设备和主机之间有足够长的网络延迟,则每个请求可能会进行两次的情况。
但是,我无法在ICS中复制此问题,仅限于Android OS 2.X
的问候,
奥利弗
答案 0 :(得分:2)
我遇到了同样的问题,但是我发现它不是特定于本机浏览器(尝试使用Skyfire)。在这三款Android手机上,重复请求之前的延迟是(始终如一):
我在工作中询问了一些建议,我得到的回应是让请求异步:
使服务器处理请求异步并立即响应POST请求,其中201包括指向状态页面/ url的位置,指示POST请求的进度。客户端可以使用GET将请求的进度检索到此URL。
答案 1 :(得分:0)
你可以在document.ready函数中放置一个console.log来确保它不会被解雇两次吗?有时插件等会导致document.ready被触发两次。
也许可以尝试在 ondeviceready 事件中调用该函数,如下所述:http://docs.phonegap.com/en/1.4.1/phonegap_events_events.md.html