如何通过XMLHttp Get请求传递数组?

时间:2018-01-15 19:48:18

标签: javascript api get xmlhttprequest

我有一个数组,我想在我的GET请求中使用它中的每个值。像这样:

function something(){
    let test = ['something', 'other', 'test'];
    let httpRequest;
     function makeRequest(){
      httpRequest = new XMLHttpRequest;
      httpRequest.onreadystatechange = test;
      for(var i = 0; i < test.length; i++){
      (function(i){
      httpRequest.open('GET', 'https://test.com/' + test[i] , true);
      })()}
      httpeRequest.send();
   }
}

我继续为test[i]定义未定义,我不确定这是否正确通过httpRequest传递数组。我将不胜感激任何帮助。

2 个答案:

答案 0 :(得分:0)

你这样做的方式你必须创建一个这样的for循环:

for(var i = 0; i < test.length; i++){    
    makeRequest(test[i])

您必须为每个项目创建新请求。否则,您可以更改API以处理接收值数组并为其返回数据。

答案 1 :(得分:0)

undefined获得test[i],因为您没有传递参数i,而您希望将其作为 IIFE 中的参数:< / p>

&#13;
&#13;
function something() {
  let test = ['something', 'other', 'test'];
  let httpRequest;

  function makeRequest() {
    httpRequest = new XMLHttpRequest;
    httpRequest.onreadystatechange = test;
    for (var i = 0; i < test.length; i++) {
      (function(i) {
        console.log(test[i]);
        httpRequest.open('GET', 'https://test.com/' + test[i], true);
         httpRequest.send(); // send request within loop
      })(i); // pass i here
    }
    // httpRequest.send();
  }
  
  makeRequest(); // call for testing
}

something(); // call for testing
&#13;
&#13;
&#13;

其他方面,代码中存在一些缺陷,例如:

  1. 如果您想要多次通话,可能需要在循环中发送请求httpRequest.send()

  2. onreadystatechange应定义function;分配数组没有意义

  3. 对于同时通话,您可能需要创建多个XMLHttpRequest请求。现在你只创建一个并更改网址,这些只会被中止。

  4. Checkout more detailed answer here.