Javascript Android中的XmlHttpRequest双重发布问题
我已经实现了一个简单的AJAX post(通过JSXMLHttpRequest对象)到webserver中的网页 然而,我在Android OS 2.X的默认浏览器上发现了一个奇怪的症状/问题 也就是说,如果由于某种原因,web服务器有足够长的延迟返回响应(可以通过硬编码线程模拟。在网页中睡眠),浏览器将在等待期间自动再次向web服务器重新发布相同的请求Javascript Android中的XmlHttpRequest双重发布问题,javascript,android,security,cordova,Javascript,Android,Security,Cordova,我已经实现了一个简单的AJAX post(通过JSXMLHttpRequest对象)到webserver中的网页 然而,我在Android OS 2.X的默认浏览器上发现了一个奇怪的症状/问题 也就是说,如果由于某种原因,web服务器有足够长的延迟返回响应(可以通过硬编码线程模拟。在网页中睡眠),浏览器将在等待期间自动再次向web服务器重新发布相同的请求 <script type="text/javascript"> $(document).ready(function()
<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>
$(文档).ready(函数(){
PerformRequest();
});
函数PerformRequest(){
appendMessage('PerformRequest…');
var xmlhttp=new XMLHttpRequest();
open(“POST”http://localhost/DelaySite/Default.aspx“,对);
xmlhttp.onreadystatechange=函数()
{
appendMessage(“xmlhttp.readyState:+xmlhttp.readyState,true);
追加消息(“xmlhttp.status:+xmlhttp.status,true);
if(xmlhttp.readyState==4&&xmlhttp.status==200)
{
//成功响应
}
}
xmlhttp.send();
}
有人在Android浏览器中看到过这个问题吗?如果是,有人知道原因吗?这不是一个安全问题吗?考虑在移动主机和主机之间存在足够长的网络延迟的情况下,每个请求可能两次做出的情况。 然而,我不能在ICS中复制这个问题,只能在Android OS 2.X中复制 问候,
Oliver你能在document.ready函数中放一个console.log来确保它不会被触发两次吗?有时插件等会导致document.ready被触发两次
可能尝试在ondeviceready事件中调用该函数,如下所述:我遇到了相同的问题,但我发现它不是本机浏览器特有的(也尝试了Skyfire)。在这三款Android手机上,重复请求之前的延迟(一致):
- 三星Galaxy S2:30秒
- HTC愿望:60秒
- HTC轰动:60秒
使服务器异步处理请求,并使用201立即响应POST请求,201包括指向指示POST请求进度的状态页/url的位置。客户端可以通过访问此url来检索请求的进度。我已确认它不是document.ready,会被触发两次。此外,我并没有测试混合android应用程序,只是一个运行AJAX调用的html页面。只有当主机响应延迟返回时,才会出现双重发布问题。看起来这里也出现了相同的问题