【问题标题】:Building and resorting a multidimensional array with AJAX/Javascript/jQuery使用 AJAX/Javascript/jQuery 构建和处理多维数组
【发布时间】:2015-12-21 23:16:43
【问题描述】:

当我的页面加载时,我有一个内置在 jQuery AJAX 调用中的多维数组,称为 sumArr

$( document ).ready( function() {

  ...

  $.ajax({
    type: 'GET',
    url: 'models/table.php',
    mimeType: 'json',
    success: function(data) {
        var sumCount = 0;
        var sumArr = [];
        $( "#sum-body" ).empty(); 
        $.each(data, function(i, data) {
            sumArr.push([
                    data[0],
                    data[1],
                    data[2],
                    data[3],
                    data[4],
                    data[5],
                    data[6],
                    data[7],
                    data[8],
                    data[9]
                ]);

            var body = "<tr class='clickable-row'>";
            body    += "<td>" + data[0] + "</td>";
            body    += "<td>" + data[1] + "</td>";
            body    += "<td>" + data[2] + "</td>";
            body    += "<td>" + data[3] + "</td>";
            body    += "<td>" + data[4] + "</td>";
            body    += "<td>" + data[5] + "</td>";
            body    += "<td>" + data[6] + "</td>";
            body    += "<td>" + data[7] + "</td>";
            body    += "<td>" + data[8] + "</td>";
            body    += "<td>" + data[9] + "</td>";
            body    += "</tr>";
            $( body ).appendTo( $( "#sum-body" ) );

            sumCount = sumCount + 1;
        });

        console.log(sumArr);
  });

  ...

});

我有另一个函数尝试重新排序数组。我最终会在我的 HTML 页面上显示该数组。

function compareCols(arr, cols) {
  arr.sort(function (a, b) {
    console.log("comparing " + a[cols] + ", " + b[cols]);
    if (a[cols] > b[cols]) {
        return 1;
      }
      if (a[cols] < b[cols]) {
        return -1;
      }

      return 0;
  });
}

compareCols('sumArr', 0);
console.log(sumArr);

当我的页面加载时,我收到以下错误:

Uncaught TypeError: arr.sort is not a function

这令人费解,因为我有一个更简单的代码版本作为示例,它可以正常工作。见下文:

var items = [
  ['Edward', 21],
  ['Sharpe', 37 ],
  ['And', 45 ],
  ['The', -12 ],
  ['Magnetic', 0 ],
  ['Zeros', 37 ]
];

function compareCols(arr, cols) {
  arr.sort(function (a, b) {
    console.log("comparing " + a[cols] + ", " + b[cols]);
    if (a[cols] > b[cols]) {
        return 1;
      }
      if (a[cols] < b[cols]) {
        return -1;
      }

      return 0;
  });
}

compareCols(items, 0);
console.log(items);

我似乎找不到这段代码出错的地方。谁能发现错误在哪里?我梳理了代码,找不到任何东西。我猜它与AJAX有关,但不确定。我最初将数组作为对象,但将其更改为一个或多个数组。

【问题讨论】:

  • 嗯,sumArr 不是arr,而且ajax 调用是异步的,数组在回调之外不可用?
  • 您是否将其称为字符串? compareCols('sumArr', 0);控制台.log(sumArr);注意 sumArr 在 ''

标签: javascript jquery arrays ajax sorting


【解决方案1】:

这里有两个问题:

  1. 当调用 compareCols('sumArr', 0);应该按照 kurt 在 cmets 中的建议删除引号。
  2. 但更大的问题是 sumArr 可能没有定义为您的全局变量。
  3. 只有在成功调用 ajax 后才需要调用 compareCols。
  4. 确保删除 ajax 部分中的 var,以便 sumArr = [] 引用全局变量。

【讨论】:

    猜你喜欢
    • 2018-06-28
    • 2012-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    • 1970-01-01
    • 2017-10-14
    • 1970-01-01
    相关资源
    最近更新 更多