Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:如何让对象在带有ajax请求的for循环中以正确的顺序推入数组_Javascript_Html_Arrays_Json - Fatal编程技术网

Javascript:如何让对象在带有ajax请求的for循环中以正确的顺序推入数组

Javascript:如何让对象在带有ajax请求的for循环中以正确的顺序推入数组,javascript,html,arrays,json,Javascript,Html,Arrays,Json,因此,我有一个连接到视频服务api的脚本,我试图按视频代码数组的顺序推送ajax请求中提供的视频标题。因此,这些视频代码用于提供信息的独立视频,如api中的标题(3t7l1ok4bagetsalicia,5cj3ro2ujqgetsdrew,等等) //这些代码连接到api并获取数据 var视频编码=[ “3t7l1ok4ba”, “5cj3ro2ujq”, “ztodsfeifx”, “u4g78mwyee” ] //这是为了保存api中提供的视频标题 变量名称=[]; //for循环发出不同

因此,我有一个连接到视频服务api的脚本,我试图按视频代码数组的顺序推送ajax请求中提供的视频标题。因此,这些视频代码用于提供信息的独立视频,如api中的标题(
3t7l1ok4ba
gets
alicia
5cj3ro2ujq
gets
drew
,等等)

//这些代码连接到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