2010-05-09 3 views
2

다음은 자바 스크립트 코드 조각입니다. 그것의 예상대로 실행되지, 제발 도와주세요.XMLHttpRequest 누설

<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 페이지에 현재 위치를 보내는 것입니다. 내 데이터베이스에서 좌표 중 몇 가지를 볼 수 있지만 때때로 언젠가는 이상하게 보입니다. 파이어 버그는 불규칙한 간격으로 동시에 POST를하는 것과 같은 매우 이상한 로그를 보여줍니다. firebug screenshot

이 프로그램에 누설된다

여기에 방화 스크린 샷이다. 도와주세요.

편집 : 불을 지르고 콘솔에서 예상되는 결과는 다음과 같이해야한다 : - 위치
POST 내부

.... 콜백 내부

/* 5 초 이상 */

내부 위치
POST ...
내부 콜바 CK

/* * 아마/

+0

여기를보십시오 : http://jsfiddle.net/ayLs7/ 특정 AJAX 페이지로 전화하지 않고 질문을 재생산합니다. 나는 당신이 설명한 문제를 일으키지 않는다는 것을 보지 못했다. 문제가 XHR이 아닌 것으로 의심되지만 Javascript의 다른 영역에있을 수 있습니다. – Ryley

답변

0

문제가 아니라 계속 반복,하지만 난이 리팩토링 제안 할 수 있습니다 :

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

: 콜백에서 두 가지 조건()을 병합

을 그리고 당신은 당신의 setTimeout 라인을 단축 할 수 있습니다 :

setTimeout(getCurrentLocation, 5000); 

그리고 문제를 해결하기 위해 callback()에서 setTimeout()을 제거하고 getCurrentLocation()에 대한 호출을이 호출로 바꿀 수 있습니까? 따라서 콜백이 실행될 때만 "콜백 성공"을 쓰고, 그 밖의 것은 없습니다.

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

나는 당신이 언급 한 변화를했다. 또한 코드를 루프에서 영원히 5 초마다 실행되기 때문에 콜백 안에 setTimeout이 필요합니다. 문제는 여전히 예상대로 아닙니다. Firebug 스크린 샷에 표시된 것과 마찬가지로 때로는 게시물이 순간에 나타나기도하고 때로는 전혀 나타나지 않는 경우도 있습니다. 나는 5 초마다 POST를하고 싶다. – Raja