通过 AJAX 访问从 Django Rest Framework 返回的数组中的项目时获取“未定义”

Posted

技术标签:

【中文标题】通过 AJAX 访问从 Django Rest Framework 返回的数组中的项目时获取“未定义”【英文标题】:Getting 'undefined' when accessing item in an array returned from Django Rest Framework via AJAX 【发布时间】:2021-05-21 01:25:08 【问题描述】:

我正在尝试访问从 AJAX GET 请求返回到 Django Rest Framework 的数组中的数据。但是,我不断收到undefined,我可以控制台记录数据并查看我试图用我的索引号定位的目标,但我没有运气。我也尝试过使用JSON.parse(),但这只是抛出了一个错误。

console.log 打印的内容如下:https://ibb.co/9y8CBw9

这是我为 javascript 准备的内容:

document.querySelector('#userLists').addEventListener('click', function(event) 
    if (event.target.dataset.name) 
      var listname = event.target.dataset.name
      console.log(listname);
      getTableData()
    
)

const getTableData = function()
  $.ajax(
      type: 'GET',
      url: '/api/uservenue/',
      data: ,
      success: function (data) 
        data.forEach(item =>  
              console.log(item.venue)
          )
          fillTable(data)
        
      );
;

function fillTable(data)

  console.log(data)
  const table = document.getElementById("dashboardTableBody");
    let row = table.insertRow();
    let name = row.insertCell(0);
    name.innerhtml = data[0][1]; 

这是我来自 DRF 的序列化程序:

class mapCafesSerializer(serializers.ModelSerializer):
    class Meta:
        model = mapCafes
        fields = ['id', 'cafe_name', 'cafe_address', 'description']


class UserVenueSerializer(serializers.ModelSerializer):
    venue = mapCafesSerializer()
    class Meta:
        model = UserVenue
        fields = ['id', 'list', 'venue']

这些是相关的模型:

class UserVenue(models.Model):
    venue = models.ForeignKey(mapCafes, on_delete=models.PROTECT)  
    list = models.ForeignKey(UserList, on_delete=models.PROTECT)

class mapCafes(models.Model): 
    id = models.BigAutoField(primary_key=True)
    cafe_name = models.CharField(max_length=200)
    cafe_address = models.CharField(max_length=200)
    cafe_long = models.FloatField()
    cafe_lat = models.FloatField()
    geolocation = models.PointField(geography=True, blank=True, null=True)
    venue_type = models.CharField(max_length=200)
    source = models.CharField(max_length=200)
    description = models.CharField(max_length=1000)

    class Meta:
        managed = False
        db_table = 'a_cafes'


    def __str__(self):
        return self.cafe_name

【问题讨论】:

你从哪里得到undefined?可能代码在调用getTableData 之后但在来自服务器的响应触发对AJAX 成功函数的回调之前尝试访问响应数据。 你好。我在 HTML 中未定义。 name.innerHTML = 数据[0][1]; 【参考方案1】:

尝试替换

name.innerHTML = data[0][1];

name.innerHTML = data[0].venue.cafe_name; 

控制台日志图像显示data 是一个一维数组,其中对象条目的形式为id, list, venue。将对象条目的属性 1 当作数组查找会返回 undefined

【讨论】:

以上是关于通过 AJAX 访问从 Django Rest Framework 返回的数组中的项目时获取“未定义”的主要内容,如果未能解决你的问题,请参考以下文章

如何从 django rest 框架访问 jwt 令牌到 Angular 前端

每当我通过 ajax 调用它时,Django Rest 框架会用 AnonymousUser 替换我当前经过身份验证的用户吗?

是否可以在 Django Rest Framework 中的 ajax 请求期间追溯 403 错误?

Django Rest DRF:从反向关系访问外键引用

使用 Axios 从前端访问 Django Rest API 时出现 Cors 错误

将 jquery 与 django rest api 放在一起