【问题标题】:Why does the script work line by line, but does not work as a whole?为什么脚本是逐行运行,但不能作为一个整体运行?
【发布时间】:2020-03-18 12:52:35
【问题描述】:

如果我全部通过 Chrome 控制台运行此脚本 - 我会收到错误

未捕获的类型错误:无法读取未定义的属性“播放列表”

var owner = "yamusic-trending"
var kind = "1000"
var url = `https://music.yandex.ru/handlers/playlist.jsx?owner=${owner}&kinds=${kind}&light=false`

json = $.getJSON(url)
var tracks = json.responseJSON["playlist"]['tracks']

如果一行一行

json = $.getJSON(url)

然后

var tracks = json.responseJSON["playlist"]['tracks']

错误不是。为什么?

【问题讨论】:

    标签: javascript jquery json get


    【解决方案1】:

    由于$.getJSON 是一个异步function,你必须在它完成后处理它,这里是一个使用回调的例子:

    $.getJSON(url, json => {
      var tracks = json.responseJSON["playlist"]['tracks']
      // do something with tracks here...
    })
    

    阅读更多关于 $.getJSON here 的信息,并阅读更多关于异步 javascript 工作原理的信息 here

    【讨论】:

    • 我认为您需要在函数之外声明 var 以便您拥有广泛的范围...
    • @SriVenkataPavanKumarMHS 当然,但 op 没有提到 tracks 必须是全局范围的。
    【解决方案2】:

    $.getJSON 是异步调用,您需要等待它完成。如果任何操作取决于此调用返回的结果,则应在回调函数中处理。

    见下面的代码

    ES5

        $.getJSON(url, function(data){
           var tracks = data.responseJSON["playlist"]['tracks']
        });
    

    ES6

    $.getJSON(url, json => {
      var tracks = json.responseJSON["playlist"]['tracks']
    });
    

    getJSON API Documentation

    【讨论】:

    • 我可以指定一个外部函数而不是这种方式..function(data){..}吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 2017-01-01
    • 1970-01-01
    • 2021-07-30
    • 1970-01-01
    相关资源
    最近更新 更多