0

基本上,我正在为我的几个朋友制作一个漂亮而简单的移动网络应用程序。它使用一些在线数据库来存储商店的位置数据。我让数据库像魅力一样工作。那里没有问题。事实上,一切都在工作,除了我认为这一切都以错误的顺序发生。数据库中的数据应该存储在一个数组中,然后该数组中的对象显示在屏幕上。但是,使用一些控制台日志,我发现正在显示数据,然后从数据库中检索数据,然后填充数组。但无论我做什么,我都无法让它工作!这是我的代码:

var latOfSpots;
    var lngOfSpots;
    var nameOfSpots;
    var spotArray;
    var spotLatLng;
    var spotCollection;
    var markers;
    var Spot;
    var spot;

    function init() {

//-------------------------- INITIATE SPOT VARIABLES ---------------------------//  
        map = new google.maps.Map2(document.getElementById("map"));
        latOfSpots= new Array(51.14400,51.02295);
        lngOfSpots= new Array(0.25721,0.26450);
        nameOfSpots= new Array('Tescos', 'Sainsburys');
        spotLatLng= new Array();
        markers= new Array();
        Spot = Parse.Object.extend("Spot");
        spot = new Spot();

//----------------- GET DATA FROM THE PARSE.COM DATABASE ---------------------//


//---------------------- DISPLAY ARRAY DATA ON MAP ---------------------------//        

        GetData();
        DisplayData();

//----------------------- SET MAP SETTINGS -----------------------------------//
        map.setCenter(spotLatLng[0],8);

        //map.addControl(new google.maps.LargeMapControl());

        map.addControl(new google.maps.MapTypeControl());



    }; //END OF INIT FUNCTION ------------------------------------------------//

    google.setOnLoadCallback(init);

//------------------- PRIMARY FUNCTION TO GET DATA FROM DATABASE ---------------//
    function GetData()
    {
                var query = new Parse.Query(Spot);
                spotCollection = query.collection();
                spotCollection.fetch({
                  success: function(spotCollection) {
                    // spotCollection.toJSON() 
                    // will now be an array of objects based on the query
                    FillArrays();
                    console.log('data retreived' + spotCollection);
                  }
        });
    }

//----------------- FUNCTION TO LOAD DATABASE INTO ARRAYS -------------------//
    function FillArrays()
    {
            spotArray = spotCollection.toJSON();
                for (var j = 0; j<spotArray.length; j++)
                {
                    latOfSpots.push(spotArray[j].Latitude);
                    lngOfSpots.push(spotArray[j].Longitude);
                    nameOfSpots.push(spotArray[j].Name);
                }
    }

//------------------------ FUNCTION TO DISPLAY ALL ARRAY DATA ONSCREEN -----------------//
    function DisplayData()
    {
        for(var i = 0; i<latOfSpots.length; i++)
        {
            spotLatLng[i] = new google.maps.LatLng(latOfSpots[i], lngOfSpots[i]);

                    for(var x = 0; x<latOfSpots.length; x++)
                    {
                        markers[x] = new google.maps.Marker(
                        spotLatLng[i], {
                        "draggable":false,
                        "title":nameOfSpots[i],
                        });
                        map.addOverlay(markers[x]);
                    }
        }

    console.log('data displayed');
    }

4

1 回答 1

0

您的数据库查询是异步的。您需要使用 Get_Data 回调函数中的数据(从服务器返回后)。目前,您正试图在服务器将其发回之前使用它。

//------------------- PRIMARY FUNCTION TO GET DATA FROM DATABASE ---------------//
    function GetData()
    {
                var query = new Parse.Query(Spot);
                spotCollection = query.collection();
                spotCollection.fetch({
                  success: function(spotCollection) {
                    // spotCollection.toJSON() 
                    // will now be an array of objects based on the query
                    FillArrays();
                    console.log('data retreived' + spotCollection);
                    DisplayData();
                  }
        });
    }
于 2013-07-30T17:07:51.217 回答