Take the 2-minute tour ×
Stack Overflow is a question and answer site for professional and enthusiast programmers. It's 100% free, no registration required.

I've been trying to get the push() method on a loop to build a structure as follows:

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

This is my code:

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

However, the Javascript console.log for locations shows an empty array.

I have tried to use push() in many different ways, but I cannot get the same structure as locations2. The biggest problem here is that I do not know how many arrays are going to be inside the locations array before the loop, so I can't initialize it beforehand.

Any thoughts?

share|improve this question
1  
Your syntax looks right -- are you sure data.points contains the array you're expecting? –  McGarnagle Dec 12 '12 at 0:54
1  
Add an error callback to your ajax call. It may be throws an error but you may not know with this code. –  Emre Erkan Dec 12 '12 at 0:56
    
You can do a quick dump of your array contents with alert( JSON.stringify(x) ) where x is the array in question. –  RonaldBarzell Dec 12 '12 at 0:56
5  
Do not forget to put the console.log statement in the callback, otherwise it won't be populated yet. –  Bergi Dec 12 '12 at 0:57
1  
please post your result json to validate! –  silly Dec 12 '12 at 7:59

1 Answer 1

up vote 4 down vote accepted

I figured out what the problem is. It has nothing to do with the push() method itself. Apparently ajax calls are not executed in sequential order (that's the reason it's asynchronous). I added async: false in the ajax call options and now everything works perfectly.

Thanks everyone for the input.

share|improve this answer
4  
async: false defeats the whole purpose of using Asynchronous JavaScript and XML. You'll run into problems like page hangs etc because your requests are now blocking. Maybe look into Deferred Objects api.jquery.com/category/deferred-object –  Aesthete Dec 13 '12 at 0:50
    
+1 for mentioning deferreds. Its worth mentioning that there's a little bit of a learning curve, but they aren't too bad at all and are well suited for situations like these. –  lbstr Jan 9 '13 at 22:33

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.