Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.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 按预期顺序检索GET请求和响应时出现问题_Javascript_Jquery_Arrays_Asynchronous - Fatal编程技术网

Javascript 按预期顺序检索GET请求和响应时出现问题

Javascript 按预期顺序检索GET请求和响应时出现问题,javascript,jquery,arrays,asynchronous,Javascript,Jquery,Arrays,Asynchronous,我的javascript代码面临一些问题,因为我的理解可能与异步函数有关 我有一些大的txt文件,我想在我的javascript代码中导入,所有内容都在同一个域下。 例如,当我打开/index.php时,我希望Javascript从位于:/log/ip\u number/log.txt中的几个文本文件加载文本 目前我使用的是这样的东西: for (var i = 0; i < numberOfVPS; i++) { $.get("/log/"+ip_list[i]+"/log.tx

我的javascript代码面临一些问题,因为我的理解可能与异步函数有关

我有一些大的txt文件,我想在我的javascript代码中导入,所有内容都在同一个域下。 例如,当我打开/index.php时,我希望Javascript从位于:/log/ip\u number/log.txt中的几个文本文件加载文本

目前我使用的是这样的东西:

for (var i = 0; i < numberOfVPS; i++) {
    $.get("/log/"+ip_list[i]+"/log.txt", function(contents){
     //does my things with contents
     array.push(myOutput)
     });
}
for(变量i=0;i
在代码的末尾,我应该得到一个数组,该数组按照ip_列表数组中ip的顺序排序。。。。但这不是我得到的,我真的不明白为什么

例如,我应该得到: 数组=[1,2,3,4,5]

其中1、2、3、4和5与ip_列表[0]、ip_列表[1]、ip_列表[2]、ip_列表[3]、ip_列表[4]相关, 但我得到的是:

array=[2,5,3,1,4],每次我重新加载页面时,都有一个不同的顺序。。。。 我认为这是因为javascript代码没有加载文本文件,因此给了我一些无序的输出,但这只是我的观点,一个新手“程序员”的观点

请帮帮我


Jerry

您的循环进行异步调用以加载文件。顺序将取决于加载文件后回调函数何时执行。这将取决于文件的大小和网络延迟

如果需要对数组中的项进行排序,可以在数组中存储一个对象,并在所有回调完成后对对象进行排序

array.push({ index: i, ip: myOutput})

array.sort(function(a, b) {
  return a.index - b.index;
}
获取您使用的原始数组


循环进行异步调用以加载文件。顺序将取决于加载文件后回调函数何时执行。这将取决于文件的大小和网络延迟

如果需要对数组中的项进行排序,可以在数组中存储一个对象,并在所有回调完成后对对象进行排序

array.push({ index: i, ip: myOutput})

array.sort(function(a, b) {
  return a.index - b.index;
}
获取您使用的原始数组


一批GET请求的解析顺序并不总是与它们被触发的顺序相同

您可以直接将.txt内容分配给相应的键,而不是将结果推送到数组中

array[i] = myOutput;
但是,由于GET回调中的
i
值将不再与执行GET请求时相同(循环中的计数器不断增加),因此需要生成一个新的作用域,在该作用域中保留
i
的值。一个
函数
会给我们这个

您还需要知道最后一个文件何时加载的方法。。。要执行您的操作

let completed =0;

const getTxt = function(i){
  $.get("/log/"+ip_list[i]+"/log.txt", contents=>{
    array[i] = myOutput;
    completed++
    if(completed === numberOfVPS){ 
      // all files have been loaded 
      yourCallbackHere();
    }
  });
}

for(let i = 0; i < numberOfVPS; i++) getTxt(i)
let completed=0;
const getText=函数(i){
$.get(“/log/”+ip_list[i]+“/log.txt”,contents=>{
数组[i]=myOutput;
完成++
如果(已完成===numberOfVPS){
//所有文件都已加载
yourCallbackHere();
}
});
}
对于(设i=0;i
我个人会使用承诺来实现这一点,它们是以一种更干净和直观的方式处理异步操作的工具


一批GET请求的解析顺序并不总是与它们被触发的顺序相同

您可以直接将.txt内容分配给相应的键,而不是将结果推送到数组中

array[i] = myOutput;
但是,由于GET回调中的
i
值将不再与执行GET请求时相同(循环中的计数器不断增加),因此需要生成一个新的作用域,在该作用域中保留
i
的值。一个
函数
会给我们这个

您还需要知道最后一个文件何时加载的方法。。。要执行您的操作

let completed =0;

const getTxt = function(i){
  $.get("/log/"+ip_list[i]+"/log.txt", contents=>{
    array[i] = myOutput;
    completed++
    if(completed === numberOfVPS){ 
      // all files have been loaded 
      yourCallbackHere();
    }
  });
}

for(let i = 0; i < numberOfVPS; i++) getTxt(i)
let completed=0;
const getText=函数(i){
$.get(“/log/”+ip_list[i]+“/log.txt”,contents=>{
数组[i]=myOutput;
完成++
如果(已完成===numberOfVPS){
//所有文件都已加载
yourCallbackHere();
}
});
}
对于(设i=0;i
我个人会使用承诺来实现这一点,它们是以一种更干净和直观的方式处理异步操作的工具


您的代码是异步的,因此您可以选择使用 例如,你可以这样写:

var files = [];
for( var n = 0; n < numberOfVPS; n++ ) {
   files[n] = $.get("FILEPATH");
}
$.when(...files).done(function(){
   array.push(...arguments);
});
var文件=[];
对于(var n=0;n


您的代码是异步的,因此您可以选择使用 例如,你可以这样写:

var files = [];
for( var n = 0; n < numberOfVPS; n++ ) {
   files[n] = $.get("FILEPATH");
}
$.when(...files).done(function(){
   array.push(...arguments);
});
var文件=[];
对于(var n=0;n


真的不知道为什么,但
var files=[];对于(var n=0;n
似乎在没有
$的情况下也能工作。当。。。我决定用这个!谢谢,我不知道为什么,但是
var files=[];对于(var n=0;n
似乎在没有
$的情况下也能工作。当。。。我决定用这个!谢谢谢谢你的回复,我最初考虑的是承诺,但运气不好,这是我第一次接触异步调用。。。我会尽我所能更好地理解承诺!感谢您的回复,我最初考虑的是承诺,但运气不好,这是我第一次接触异步调用。。。我会尽我所能更好地理解承诺!