繁体   English   中英

XMLHttpRequest泄漏

[英]XMLHttpRequest leak

以下是我的JavaScript代码段。 它没有按预期运行,请帮助我。

<script type="text/javascript">

   function getCurrentLocation() {
     console.log("inside location");
     navigator.geolocation.getCurrentPosition(function(position) {
       insert_coord(new google.maps.LatLng(position.coords.latitude,position.coords.longitude)); 
       });
   }

   function insert_coord(loc) {
     var request = new XMLHttpRequest();
     request.open("POST","start.php",true);
     request.onreadystatechange = function() {
                                     callback(request);
                                  };
     request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
     request.send("lat=" + encodeURIComponent(loc.lat()) + "&lng=" + encodeURIComponent(loc.lng()));

     return request;
   }

   function callback(req) {
     console.log("inside callback");
     if(req.readyState == 4)
       if(req.status == 200) {
         document.getElementById("scratch").innerHTML = "callback success";
         //window.setTimeout("getCurrentLocation()",5000);
         setTimeout(getCurrentLocation,5000);
       }
   }

getCurrentLocation(); //called on body load
</script>

我要实现的目标是每5秒左右将当前位置发送到php页面。 我几乎看不到数据库中的坐标,但过了一段时间,它变得很奇怪。 Firebug显示非常奇怪的日志,例如以不定期的间隔同时进行POST。

这是萤火虫的屏幕截图: 萤火虫截图

程序是否泄漏? 请帮忙。

编辑:firebug控制台中的预期结果应该是这样的:-

内部位置
开机自检....
内部回调

/ * 5秒后* /

内部位置
开机自检...
内部回调

/ *继续重复* /

可能不是问题,但我可以建议两种重构:

在callback()中合并两个条件:

if ((req.readyState == 4) && (req.status == 200)) {

您可以将setTimeout行缩短为:

setTimeout(getCurrentLocation, 5000);

为了解决此问题,我能否让您从callback()中删除setTimeout(),并用它替换对getCurrentLocation()的调用? 因此,您仅在运行回调时编写“回调成功”,其他都没有。

setTimeout(getCurrentLocation, 5000); //called on body load

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM