I have global variable var distances = []
. I have function to fill it but it takes some time. And I want to send it to Django view when it's filled. However due to JS asynchronous work I alway send empty array. How can I send filled array without setting timeout? My js code is
var distances = [] //array where some digits will be stored
function getAllDistances() //function where this digits being put in distances arr
//note that every digit is result of request to API of routing service so it takes
//some time to get thing done
function ajaxTest(){//function for sending array to Django view
$.ajax({
url:'test/',
type:'POST',
data:JSON.stringify({distances : distances}),
dataType: 'json',
success:function (data) {
console.log("Ajax test success");
console.log(data.result.text);//view should return some result
},
error:function () {
console.log("Ajax test failure")
}
})
}
function doTheJob(){ //main function
getAllDistances();
ajaxTest();
}
So everything is ok with request but it always sends empty array. Is it possible to make js send filled array without setting timeout? I guess callback will do thing here but correct me if I wrong
To make it more clear I'll add function that gets me distances
function getRoutSummary(i, j, q) {
var url = 'https://router.project-osrm.org/route/v1/driving/' +
coords[i][1] + ',' + coords[i][0] + ';' +
coords[j][1] + ',' + coords[j][0] +
'?geometries=geojson';
//coord is array of arrays with coordinates like
//[[lat1, long1], [lat2, long2], [lat3, long3]] where lat is latitude and long
//is longtitude
var req = new XMLHttpRequest();
req.responseType = 'json';
req.open('GET', url, true);
req.onload = function () {
var jsonResponse = req.response;
var distance = jsonResponse.routes[0].distance;
distances[q] = distance;
};
req.send();
}
And then I call this function in loop
function getAllDistances(){
var q = 0;
for (var i = 0; i < coords.length; i++){
for (var j = 0; j < coords.length; j++){
getRoutSummary(i, j, q);
q = q + 1;
}
}
console.log(distances);
}