首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么$.getJSON只在使用字符串文字时有效,而在使用变量时抛出未定义的错误?

为什么$.getJSON只在使用字符串文字时有效,而在使用变量时抛出未定义的错误?
EN

Stack Overflow用户
提问于 2019-06-03 00:40:59
回答 1查看 33关注 0票数 -1

所以我认为这可能是一个作用域问题,但是我有点困惑,为什么我不能使用变量访问来自$.getJSON()请求的响应数据。

当调用$.getJSON( 'fruits.json‘)时,数据会如期返回,我可以将’fruits.json‘替换为cat+'.json’,这似乎也很好用。

但是,在评估数据响应时,使用'data.cat.length‘返回时未定义,即使fruits.json文件中的对象名为cat = fruits。

硬编码的'data.fruits.length‘按预期工作,但用’data.fruits.length‘替换变量'cat’返回未定义的结果。

我不确定我做错了什么,但是我们的目标是让createQuestion( category )函数根据category输入动态加载一个不同的JSON文件。

代码语言:javascript
复制
    function createQuestion(category){

          var cat = category;

          // JSON Data Import
          $.getJSON('fruits.json', function(data) {

            // Generate Cards
            var cards = [];
            var display = [];
            for (i=0; i<data.fruits.length; i++) {
              cards.push(data.fruits[i]);
            }

我假设var cat = 'fruits‘与'fruits’相同,但数据对象似乎并不一致。你觉得我做错了什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-03 01:01:21

响应数据对象是如何布局的;例如,您是否可以在响应回调中实际发布data变量的结构?

在没有看到数据的情况下,我最初的猜测是,当您说data.cat.length时,您正在尝试获取字面上称为'cat'data对象上的属性。不是其名称是作为参数传递到函数中的类别的属性,而只是'cat'

换句话说,如果你的JSON响应看起来像这样,data.cat.length就可以工作了:

代码语言:javascript
复制
{ 
  "cat": ["tabby", "siamese", "persian"]
  ...
}

相反,data.fruits.length可能正在工作,因为我猜您的响应是如下所示的对象:

代码语言:javascript
复制
{
  "fruits": ["apple", "orange", "banana"]
  ...
}

但是,如果您的响应是一个类似于最后一个对象的对象,并且您请求data.cat.length,那么data.cat最有可能返回undefined

如果您有一个类似这样的响应对象,但是想要通过一个类别变量访问它的"fruits"部分,那么您需要访问this answer中给出的对象属性。所以,在你的例子中:

代码语言:javascript
复制
var cat = "fruits"
data[cat].length // should be 3, with our example response above

因此,您可能需要将函数修改为:

代码语言:javascript
复制
function createQuestion(category){
  var cat = category;

  // JSON Data Import
  $.getJSON(cat + '.json', function(data) {
    // Generate Cards
    var cards = [];
    var display = [];

    for (i=0; i < data[cat].length; i++) {
      cards.push(data[cat][i]);
    }

也就是说,如果您的JSON响应不像我上面猜测的那样,我可能已经回答了一个完全不相关的问题:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56416961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档