Javascript:如何让对象在带有ajax请求的for循环中以正确的顺序推入数组
因此,我有一个连接到视频服务api的脚本,我试图按视频代码数组的顺序推送ajax请求中提供的视频标题。因此,这些视频代码用于提供信息的独立视频,如api中的标题(Javascript:如何让对象在带有ajax请求的for循环中以正确的顺序推入数组,javascript,html,arrays,json,Javascript,Html,Arrays,Json,因此,我有一个连接到视频服务api的脚本,我试图按视频代码数组的顺序推送ajax请求中提供的视频标题。因此,这些视频代码用于提供信息的独立视频,如api中的标题(3t7l1ok4bagetsalicia,5cj3ro2ujqgetsdrew,等等) //这些代码连接到api并获取数据 var视频编码=[ “3t7l1ok4ba”, “5cj3ro2ujq”, “ztodsfeifx”, “u4g78mwyee” ] //这是为了保存api中提供的视频标题 变量名称=[]; //for循环发出不同
3t7l1ok4ba
getsalicia
,5cj3ro2ujq
getsdrew
,等等)
//这些代码连接到api并获取数据
var视频编码=[
“3t7l1ok4ba”,
“5cj3ro2ujq”,
“ztodsfeifx”,
“u4g78mwyee”
]
//这是为了保存api中提供的视频标题
变量名称=[];
//for循环发出不同的请求
对于(i=0;i
该脚本的工作原理是,它将名称推送到名称数组和控制台日志,但它们不符合视频代码数组的顺序
因此,例如
3t7l1ok4ba
推出alicia
,但有时alicia
将成为第二个、第三个或第四个条目。这是完全随机的,我每次运行脚本都会得到不同的结果。任何帮助都将不胜感激 问题在于控制台日志的顺序是api响应的顺序。您同时发出所有请求,因此第二个请求可能会在第一个请求之前返回。维护订单的一种方法是仅在上一个请求返回后执行下一个请求:
function loadVideo(i) {
if (i < video_codes.length) {
var video_request = new XMLHttpRequest()
video_request.open('GET', 'https://api.wistia.com/v1/medias/'+video_codes[i]+'.json?api_password=', true)
video_request.onload = function() {
var video = JSON.parse(this.response)
var video_name = video.name;
// add to names array
names.push(video_name);
// console log names array 4 times
console.log(names);
loadVideo(i + 1); // Load next only after response received
}
video_request.send()
}
}
loadVideo(0); // Load first video
函数加载视频(i){
if(i<视频编码长度){
var video_request=new XMLHttpRequest()
视频请求。打开('获取','https://api.wistia.com/v1/medias/“+video_code[i]+'.json?api_password=”,true)
video_request.onload=函数(){
var video=JSON.parse(this.response)
var video_name=video.name;
//添加到名称数组
名称。推送(视频名称);
//控制台日志名数组4次
console.log(名称);
loadVideo(i+1);//仅在收到响应后加载下一个
}
视频请求。发送()
}
}
加载视频(0);//加载第一个视频
请确保这会降低代码的速度。同时执行所有请求会更快。试着找到一种方法,要求在一个单一的电话,检查所有感谢你的文件!它将只用于一个小滑块,认为目前最多10个请求只是这4个请求,其他3个请求正在计划中。你认为这会是个大问题吗?
function loadVideo(i) {
if (i < video_codes.length) {
var video_request = new XMLHttpRequest()
video_request.open('GET', 'https://api.wistia.com/v1/medias/'+video_codes[i]+'.json?api_password=', true)
video_request.onload = function() {
var video = JSON.parse(this.response)
var video_name = video.name;
// add to names array
names.push(video_name);
// console log names array 4 times
console.log(names);
loadVideo(i + 1); // Load next only after response received
}
video_request.send()
}
}
loadVideo(0); // Load first video