Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Android中的XmlHttpRequest双重发布问题_Javascript_Android_Security_Cordova - Fatal编程技术网

Javascript Android中的XmlHttpRequest双重发布问题

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()

我已经实现了一个简单的AJAX post(通过JSXMLHttpRequest对象)到webserver中的网页

然而,我在Android OS 2.X的默认浏览器上发现了一个奇怪的症状/问题 也就是说,如果由于某种原因,web服务器有足够长的延迟返回响应(可以通过硬编码线程模拟。在网页中睡眠),浏览器将在等待期间自动再次向web服务器重新发布相同的请求

<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页面。只有当主机响应延迟返回时,才会出现双重发布问题。看起来这里也出现了相同的问题