gpt4 book ai didi

javascript - 当数组已满时,Ajax 发送数组

转载 作者:行者123 更新时间:2023-11-28 17:04:09 25 4
gpt4 key购买 nike

我有全局变量var distances = []。我有功能来填补它,但需要一些时间。我想在它填满时将其发送到 Django View 。然而,由于 JS 异步工作,我总是发送空数组。如何在不设置超时的情况下发送填充数组?我的js代码是

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

所以请求一切正常,但它总是发送空数组。是否可以让js发送填充数组而不设置超时?我想回调会在这里做事,但如果我错了请纠正我

<小时/>

为了更清楚,我将添加获取距离的函数

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

然后我在循环中调用这个函数

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

最佳答案

使用promisesPromise.all()

distancePromise = [];

function getAllDistances() {
//a loop
var promise = getSingleDistance();
distancePromise.push(promise);
//return a array of promises
return distancePromise
}
//send the distances after all the promises have been resolved
Promise.all(distancePromise).then(function(distances) {
//save the distances
})

关于javascript - 当数组已满时,Ajax 发送数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56341811/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com