것은

2012-12-12 2 views
7

나는 다음과 같은 구조를 구축하는 루프에 푸시() 메소드를 얻기 위해 노력했습니다는 :것은

var locations = []; 

$.ajax({ 
    type: "POST", 
    url: "/ajax/map.php", 
    data: "name=test", 
    dataType: "json", 
    cache: false, 
    success: function(data){ 
     $.each(data.points, function(i,item){ 
      array_push = ["test", parseFloat(item.origem_lat), parseFloat(item.origem_lng), i]; 
      locations.push(array_push); 
     });    
    } 
}); 
:

var locations2 = [ 
    ['User', position.coords.latitude, position.coords.longitude, 1], 
    ['Bondi Beach', -33.890542, 151.274856, 2], 
    ['Coogee Beach', -33.923036, 151.259052, 3], 
    ['Cronulla Beach', -34.028249, 151.157507, 4], 
    ['Manly Beach', -33.80010128657071, 151.28747820854187, 5], 
    ['Maroubra Beach', -33.950198, 151.259302, 6] 
]; 

이 내 코드입니다

그러나 위치에 대한 Javascript console.log에는 빈 배열이 표시됩니다.

많은 다른 방법으로 push()를 사용하려고했지만 locations2와 같은 구조를 얻을 수 없습니다. 여기서 가장 큰 문제는 루프 앞에 위치 배열 안에 얼마나 많은 배열이 있는지 모르기 때문에 사전에 초기화 할 수 없다는 것입니다.

의견이 있으십니까?

+1

올바른 구문입니다. 'data.points'에는 예상 한 배열이 포함되어 있습니까? – McGarnagle

+1

ajax 호출에 오류 콜백을 추가하십시오. 오류가 발생할 수 있지만이 코드를 알지 못할 수 있습니다. –

+0

alert (JSON.stringify (x))를 사용하여 배열 내용을 빠르게 덤프 할 수 있습니다. 여기서 x는 문제의 배열입니다. – RonaldBarzell

답변

4

나는 문제가 무엇인지 알아 냈다. push() 메서드 자체와는 아무런 관련이 없습니다. 명백하게 아약스 호출은 순차적 순서로 실행되지 않습니다 (이것이 비동기식입니다). 나는 async : aaax 호출 옵션에 거짓을 추가했는데 이제는 모든 것이 완벽하게 작동합니다.

의견을 보내 주셔서 감사합니다.

+4

'async : false'는 ** Asynchronous JavaScript와 XML **의 모든 목적을 뒤엎고 있습니다. 요청이 차단되어 페이지가 멈추는 등의 문제가 발생합니다. 어쩌면 ** Deferred Objects **를 보게됩니다. http://api.jquery.com/category/deferred-object/ – Aesthete

+0

+1 지연을 언급합니다. 학습 곡선이 약간 있음을 언급 할 가치는 있지만, 그다지 나쁘지는 않으며 이러한 상황에 매우 적합합니다. – lbstr