2017-05-18 1 views
0

Ich möchte ein Objekt mit den Daten, die ich mit Ajax aufrufen abrufen. Das Problem, ich rufe meine Funktion jeden AJAX-Aufruf und es macht ein Array mit 1 Einträgen * meine 10 Dateien, aber ich möchte 1 Array mit 10 Einträgen.Ajax Anruf, machen Array-Objekt

function mapXML(data) { 
    for (let i = 0; i < data.length; i++) { 
    let maps = 'maps/' + data[i]; 
    $.ajax({ 
     url: maps, 
     type: "GET", 
     datatype: "xml", 
     success: function(xml) { 
     traitementCarte(xml) 

     } 
    }); 
    } 
} 

function traitementCarte(xml) { 

    console.log(xml) 

    let lat = [], 
    lng = [], 
    test = []; 

    var lastElementLat, 
    lastElementLng; 

    $(xml).find('trkpt').each(function(i, el) { 
    lat[i] = parseFloat($(this).attr('lat')); 
    lng[i] = parseFloat($(this).attr('lon')) 
    }); 

    lastElementLat = lat[lat.length - 1]; 
    lastElementLng = lng[lng.length - 1]; 

    let locations = { 
    lat: lastElementLat, 
    lon: lastElementLng 
    }; 

    test.push(locations); 

    console.log(test) 
} 

Console.log(test)

Ich habe keine Lösung für mein Problem. Danke

+0

Können Sie bitte ein Beispiel für die zurückgegebenen XML-Daten aus dem Ajax-Aufruf angeben? Zusammen mit dem anderen Code, der deine Ajax-Funktion aufruft, usw. – Woodrow

Antwort

1

Sie müssen die Array-Variable außerhalb der traitementCarte()-Funktion deklarieren, sonst erstellen Sie jedes Mal ein neues Array, wenn Sie es aufrufen.

var test = []; 

function traitementCarte(xml) { 

    console.log(xml) 

    let lat = [], 
    lng = []; 

    var lastElementLat, 
    lastElementLng; 

    $(xml).find('trkpt').each(function(i, el) { 
    lat[i] = parseFloat($(this).attr('lat')); 
    lng[i] = parseFloat($(this).attr('lon')) 
    }); 

    lastElementLat = lat[lat.length - 1]; 
    lastElementLng = lng[lng.length - 1]; 

    let locations = { 
    lat: lastElementLat, 
    lon: lastElementLng 
    }; 

    test.push(locations); 

    console.log(test) 
} 
+0

Solch eine einfache Lösung, ich wünschte, ich könnte ihr zwei Upvotes geben! – garek007

+0

OMG, ich teste das nicht ... Anfänger Fehler .. vielen Dank – simonmnt