2012-12-12 28 views
7

Próbowałem dostać metody push() w pętli zbudować strukturę, co następuje:push tablicy do tablicy w JavaScript (jQuery)

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] 
]; 

To jest mój kod:

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); 
     });    
    } 
}); 

Jednak plik JavaScript console.log dla lokalizacji pokazuje pustą tablicę.

Próbowałem użyć funkcji push() na wiele różnych sposobów, ale nie mogę uzyskać takiej samej struktury jak lokalizacje2. Największym problemem jest to, że nie wiem, ile tablic będzie znajdować się w tablicy lokalizacji przed pętlą, więc nie mogę tego wcześniej zainicjować.

Jakieś myśli?

+1

Twoja składnia wygląda prawidłowo - czy na pewno 'data.points' zawiera żądaną tablicę? – McGarnagle

+1

Dodaj wywołanie zwrotne błędu do wywołania ajax. Może to spowodować błąd, ale możesz nie znać tego kodu. –

+0

Możesz wykonać szybki zrzut zawartości tablicy za pomocą alertu (JSON.stringify (x)), gdzie x jest odpowiednią tablicą. – RonaldBarzell

Odpowiedz

4

Uświadomiłem sobie, na czym polega problem. Nie ma to nic wspólnego z samą metodą push(). Wygląda na to, że wywołania ajaxowe nie są wykonywane sekwencyjnie (dlatego jest to asynchroniczne). Dodałem async: false w opcjach połączeń ajax i teraz wszystko działa idealnie.

Dziękuję wszystkim za wkład.

+4

'async: false' pokonuje cały cel używania ** asynchronicznego kodu JavaScript i XML **. Pojawią się problemy, takie jak zawieszanie się strony itp., Ponieważ Twoje żądania są teraz blokowane. Może zajrzeć do ** Odroczonych obiektów ** http://api.jquery.com/category/deferred-object/ – Aesthete

+0

+1 za wzmiankę o odroczeniach. Warto wspomnieć, że jest trochę krzywej uczenia się, ale nie są one wcale takie złe i dobrze nadają się do takich sytuacji. – lbstr