【问题标题】:Javascript and Django Rest Framework - cannot read propertyJavascript 和 Django Rest Framework - 无法读取属性
【发布时间】:2019-11-26 15:46:19
【问题描述】:

我正在尝试从使用 Django Rest Framework 创建的 API 端点检索数据。起初,我的代码有效,但现在我不断收到此错误:

Uncaught TypeError: Cannot read property 'ticker' of undefined

这很奇怪,因为下面代码中的 console.logstatement 没有返回任何内容,尽管我确信我正在调用的端点中有数据。

这就是我要检索的数据的样子:

[
 {
   ticker: "TEST",
   Price: 7876
 }
]

这是我构建的 Ajax 函数:

function doPoll(){

    $.getJSON('http://127.0.0.1:8000/tst/', function(data) {


        console.log(data[0]);

        $('#data').text(data[0].ticker + ' ' + data[0].Price);
        setTimeout(doPoll, 100);
    });
} 

doPoll();

这就是数据应该出现的地方:

<h3 id="data"></h3>

该函数应该将我的数据放在我的 html 页面上并每秒刷新一次该数据。

http://127.0.0.1:8000/tst/ 是我尝试调用的 DRF API 端点,我从中检索 JSON 数据。

【问题讨论】:

  • 在请求 127.0.0.1:8000/tst/ 时,您的网络日志显示什么?听起来这是你后端的问题,而不是前端。
  • @bryan60 刚刚检查,这是响应: {"count":1,"next":null,"previous":null,"results":[{"ticker":"TEST" ,"价格":7876}]}

标签: javascript django ajax django-rest-framework


【解决方案1】:

您需要访问 data.results...这是标准 DRF 响应格式

function doPoll(){

    $.getJSON('http://127.0.0.1:8000/tst/', function(data) {

        var results = data.results;
        console.log(results[0]);

        $('#data').text(results[0].ticker + ' ' + results[0].price);
        setTimeout(doPoll, 100);
    });
} 

doPoll();

【讨论】:

    【解决方案2】:

    你在这里打错了 data[0].Price 应该是 data[0].price

           $.getJSON('http://127.0.0.1:8000/tst/', function(data) {
    
                 if(data && data.length > 0){
                    console.log(data[0]);
    
                    $('#data').text(data[0].ticker + ' ' + data[0].Price);
                    setTimeout(doPoll, 100);
                  }else{
                     //console.log('No Data')
                     console.log("DATA is: ", data)
                  }
    
                });
    

    在访问它的属性之前验证 data[0] 是否存在

    调试此问题的最佳方法是检查浏览器开发工具中的响应 网络标签

    【讨论】:

    • 对不起,编辑问题时打错字了。马上改正
    • 这样验证数据时应该不会出错
    • 它说'没有数据',但我确定有数据,因为 Ajax 正在查询 DRF,它从数据库中获取数据
    • 在 else 中第二次登录试试
    • 仍然收到“无数据”
    猜你喜欢
    • 2017-08-21
    • 2020-08-21
    • 1970-01-01
    • 1970-01-01
    • 2020-06-20
    • 2022-01-14
    • 1970-01-01
    • 2015-05-21
    • 2014-09-26
    相关资源
    最近更新 更多