2012-12-12 8 views
7

Ho cercato di ottenere il metodo push() su un ciclo per costruire una struttura come segue:Spingere array in array in 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] 
]; 

Questo è il mio codice:

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

Tuttavia, il file console.log di Javascript per le posizioni mostra una matrice vuota.

Ho provato a utilizzare push() in molti modi diversi, ma non riesco a ottenere la stessa struttura di locations2. Il problema più grande qui è che non so quanti array saranno all'interno dell'array di posizioni prima del ciclo, quindi non posso inizializzarlo in anticipo.

Qualche idea?

+1

La tua sintassi sembra corretta - sei sicuro che 'data.points' contiene l'array che stai aspettando? – McGarnagle

+1

Aggiungi un callback di errore alla chiamata ajax. Potrebbe essere un errore ma potresti non sapere con questo codice. –

+0

È possibile eseguire una rapida copia dei contenuti dell'array con avviso (JSON.stringify (x)) dove x è l'array in questione. – RonaldBarzell

risposta

4

Ho capito qual è il problema. Non ha nulla a che fare con il metodo push() stesso. Apparentemente le chiamate ajax non vengono eseguite in ordine sequenziale (questo è il motivo per cui è asincrono). Ho aggiunto async: false nelle opzioni di chiamata ajax e ora tutto funziona perfettamente.

Grazie a tutti per l'input.

+4

'async: false' sconfigge l'intero scopo dell'utilizzo di ** Asynchronous JavaScript and XML **. Incontrerai problemi come la pagina si blocca ecc. Perché le tue richieste ora stanno bloccando. Forse esaminare ** Oggetti differiti ** http://api.jquery.com/category/deferred-object/ – Aesthete

+0

+1 per menzionare i differiti. Vale la pena ricordare che c'è una piccola curva di apprendimento, ma non sono affatto male e si adattano bene a situazioni come queste. – lbstr