[英]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.