2012-11-14 4 views
1

setTimeout 함수를 사용하여 $ .ajax 호출 내에 $ .post를 포함하려고하는데 콜백 함수에 데이터가 전송 될 때 다음 오류가 발생합니다.

오류 : data.sector가 을 위해 정의되지 않는다 (VAR I = 0, = LEN data.sector.length 내가 < LEN을, 난 ++) {를

어떤 도움 해상도가 크게 이해된다.

아약스 물건 :

 var browserUTC = new Date().getTime(); 
     var test = Math.floor(browserUTC/1000); 
     //document.write(test); 

     $.ajax({ 
      type : 'POST', 
      url : 'php_scripts/currentFile.php', 
      dataType : 'json', 
      data  : { "func" : "getFirstAndNext", epochTime : browserUTC, "func" : "getUpdateAndInterval" }, 
      success : function(data) { 

      data1 = JSON.parse(data.first); 
      next = JSON.parse(data.next); 
      sector_callback(data1); 

      console.log(data.interval); 
      console.log(data.update); 

      setTimeout(function() { 

       // ajax to retreive new file 
       $.post ('php_scripts/newFile.php', 
       { 
        epochTime : data.next, 
        dataType : 'json', 
        data : { "func" : "getNext", epochTime : data.next }, 
       }), 
       removeSectors(); 
       next = JSON.parse(data.next); 
       console.log('hello'); 
       console.log(next); 
       sector_callback(next); 
       //console.log('worked'); 

       console.log("Ding!",Date()); // This is where I will load first JSON file 
       setInterval(function() { console.log("Dong!",Date()); }, data.interval * 60 * 1000); 
      }, data.update);  

      }, 
      error : function (XMLHttpRequest, textStatus, errorThrown) { 
      } 
     }); 

콜백 :

var allPolygons = []; 
    function sector_callback(data) { 
     //console.log(data); 
     var bounds = new google.maps.LatLngBounds();   
     for (var i = 0, len = data.sector.length; i < len; i++) { 
      coords = data.sector[i].geometry.coordinates[0]; 
      siteNames = data.sector[i].properties.Name; // added for site names 
      health = data.sector[i].properties.Health; 
      calls = data.sector[i].properties.Calls; 
      drops = data.sector[i].properties.Drops; 
      blocks = data.sector[i].properties.Blocks; 
      TCCFs = data.sector[i].properties.TCCFs; 
      dcr = data.sector[i].properties.DCR; 
      TCCFpct = data.sector[i].properties.TCCFpct; 
      path = []; 
     for (var j = 0, len2 = coords.length; j < len2; j++){ // pull out each  set of coords and create a map object 
      var pt = new google.maps.LatLng(coords[j][1], coords[j][0]) 
      bounds.extend(pt); 
      path.push(pt); 

     } 

     if (health == 1) 
     { 
      var polygons = new google.maps.Polygon({ 
      path: path, 
       strokeColor: "#000000", 
       strokeOpacity: 0.8, 
       strokeWeight: 1, 
       fillColor: "#FF0000", 
       fillOpacity: 0.35, 
      map: map 
      }); 
     } else { 
      var polygons = new google.maps.Polygon({ 
      path: path, 
       strokeColor: "#000000", 
       strokeOpacity: 0.8, 
       strokeWeight: 1, 
       fillColor: "#000000", 
       fillOpacity: 0.35, 
      map: map 
      }); 
     } 
     createClickablePoly(polygons, "Site: " + siteNames + "</br>" + "Total_calls " + calls + "</br>" + "Total_drops " + drops 
      + "</br>" + "Total_blocks " + blocks + "</br>" + "Total_TCCF " + TCCFs + "</br>" + "DCR " + dcr + "</br>" + "TCCFR " + TCCFpct); 


     google.maps.event.addListener(polygons, 'mouseover', function() { 
     var currentPolygon = this; 
     currentPolygon.setOptions({ 
      fillOpacity: 0.45, 
      fillColor: "#FF0000" 
      }) 
     }); 

     if (health == 1) 
     { 
      google.maps.event.addListener(polygons, 'mouseout', function() { 
      var currentPolygon = this; 
      currentPolygon.setOptions({ 
       fillOpacity: 0.35, 
       fillColor: "#FF0000" 
       }) 
      }); 
     } else { 
      google.maps.event.addListener(polygons, 'mouseout', function() { 
      var currentPolygon = this; 
      currentPolygon.setOptions({ 
       fillOpacity: 0.35, 
       fillColor: "#000000" 
       }) 
      }); 
     } 

     allPolygons.push(polygons); 
     } 
    } 
+0

데이터 : { "func": "getNext", epochTime : data.next}, }), 이 부분이 쉼표로 끝나야합니까? – Zim84

답변

0

것이 가능 될 수 set_timeout은은 기본 $ 아약스가 이미 종료 된 호출 된 기능 때문에 변수의 데이터를 호출 할 때 '제거해야합니까? $ 아약스() 비동기 기능은 ...

예 :

function test() { 
    var bla = 'test'; 
    $.ajax({ 
     // config 
     success : function(data) { 
      alert(bla); // should be 'undefined'; 
     } 
    }); 
} 

가능한 솔루션 :

  1. 중 하나가 (항상 작동하는) 변수 지구를 만들거나
  2. success : 함수 내에서 선언 된 경우 변수를 set_timeout 함수로 전달하십시오. 그렇지 않다면 통과 시키십시오.

솔직히 난에 어떤 변수이

next = JSON.parse(data.next); 

의 두 번째 전화가 참조 모른다. 귀하의 게시물에 코멘트로 작성된 바와 같이, 나는 당신이 구문 오류 2 줄 위의 믿습니다.

+0

그럴 수도 있습니다. 그것을 고치는 방법에 대한 제안이 있습니까? 고맙습니다. –

+0

편집 된 게시물에서 가능한 두 가지 해결책을 썼습니다. – Zim84