如何在另一个函数调用中设置全局数组值

时间:2016-05-02 06:50:09

标签: javascript jquery ajax multidimensional-array

我正在使用ajax调用从数据库中检索值,然后尝试将这些值插入到数组中(全局声明)。但在调用函数之外,如果我尝试检查数组的值,则显示空数组。这是我的代码:

function functionName() {

  var arr1 = [];
  var arr2 = [];

  $(function() {

    $.ajax({
      url: "RandomURL",
      data: {
        some random data
      }
    }).done(
      function(data) {
        console.log(data.data);

        for (var i = 0; i < data.data.length; i++) {
          arr1.push({
            x: data.data[i][0],
            y: data.data[i][1]
          });
          arr2.push({
            x: data.data[i][0],
            y: data.data[i][2]
          });
        }

      });

  });
  console.log(arr1);
  console.log(arr2);

  return [{
    values: arr1,
    key: 'array1 values',
    color: '#ff7f0e'
  }, {
    values: arr2,
    key: 'arr2 values',
    color: '2ca02c'
  }];

}

3 个答案:

答案 0 :(得分:0)

如下所示更改,您不需要将这些数组返回到另一个函数,因为您已将其声明为全局:

    var arr1 = [];
    var arr2 = [];

    function functionName() { 

    $.ajax({
          url: "RandomURL",
          data: {
            some random data
          }
        }).done(
          function(data) {
            console.log(data.data);

            for (var i = 0; i < data.data.length; i++) {
              arr1.push({
                x: data.data[i][0],
                y: data.data[i][1]
              });
              arr2.push({
                x: data.data[i][0],
                y: data.data[i][2]
              });
            }

          });

      console.log(arr1);
      console.log(arr2);


    }

因此,您可以在plod数据中指定值,如:

var plotData = [{
    values: arr1,
    key: 'array1 values',
    color: '#ff7f0e'
  }, {
    values: arr2,
    key: 'arr2 values',
    color: '2ca02c'
  }];

答案 1 :(得分:0)

您正在返回信息并使用AJAX成功之外的控制台日志。在JQuery中,AJAX默认是异步的。您可以在设置中将其设置为async:false,但通常建议它是异步的。

如果你想让它保持异步,你需要真正完成ajax的done / success部分的所有工作。这会带来潜在的问题,因为需要更多未被封装的全局变量,并调用其他函数并在其中进行后续工作。

或者它可以让你沿着承诺的路径前进,以便在ajax调用完成后按照后续顺序调用函数。

function callAjax() {
  $.ajax(...

  ...done(function(data) {
    // do work and then
    plotUsingData();
  });
}

function plotUsingData() {
 // now the graph or display of data is created after the content is loaded
}

答案 2 :(得分:0)

var arr1 = [];并不真正创建全局变量。 arr1 = [];确实如此。