AJAX调用返回ARRAY或单个OBJECT导致错误

时间:2018-04-18 14:25:10

标签: javascript ajax

Javascript真的不是我的力量,事实上我对它很可怕,所以刚刚开始掌握它。

我使用GET对API进行了AJAX调用。 API返回标准JSON。

如果我没有提供身份证,我的回复就是所有记录。如果我提供ID,我会收到一个单一记录响应。这是正确的。

这是我的代码:

    $.ajax({
      url: apiURL,
      dataType: "json",
      type: "Get",
      success: function (data) {
        var row;
        for (var i = 0; i < data.length; i++) {
          row = row + "<tr>";
          row = row + "<td>" + data[i].id + "</td>";
          row = row + "<td>" + data[i].latitude + "</td>";
          row = row + "<td>" + data[i].longitude + "</td>";
          row = row + "<td>" + data[i].description + "</td>";
          row = row + "<td>" + data[i].dateRecorded + "</td>";
          row = row + "</tr>";
        };
        $("#results").append(row);
        ......

如你所见,我想把结果拿出来放在桌子上。当我的响应是多个记录时,这很有效,但如果我的响应是单个记录,则会得到一个OBJECT而不是ARRAY,代码在data.length处失败。为什么我没有一个带有单个元素的ARRAY,我该怎么办呢?

我将不胜感激任何帮助。

2 个答案:

答案 0 :(得分:5)

  

为什么我没有使用单个元素的ARRAY

因为这是您正在使用的API的作者的设计决定。

  

我该怎么办呢?

测试看看你得到了什么。如果它不是已存在的数组,请将其放入数组中。

if (! (data instanceof Array) ) {
    data = [data];
}

答案 1 :(得分:0)

试试这个:

success: function (data) {

    if( !data.length ) data = [ data ];

    ...

}

这将检查返回的值是否是单个对象。如果它是一个好的API,它总会返回一个数组,但是因为它不是你必须自己检查。

是的,有更好的方法来检查数据是否是一个数组,如@Quentin的答案

!(data instanceof Array)