You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle JET:使用JSON数据创建饼图遇引用错误求助

解决用Rest Countries API数据填充饼图时的ReferenceError: data is not defined问题

看起来你在尝试通过Rest Countries API获取数据生成饼图时遇到了异步操作导致的变量未定义问题,我来帮你梳理下原因和解决办法:

错误原因分析

这个报错说明在你的ViewModel代码第25行,你尝试使用data变量时,它要么没被提前声明,要么因为AJAX请求的异步特性,数据还没返回就被调用了。$.getJSON是异步操作,代码不会等待请求完成再执行后续逻辑,所以如果在回调外部直接使用data,必然会出现未定义的问题。

具体解决步骤

1. 把饼图数据处理逻辑放在异步回调内部

确保只有当API数据返回后,再处理数据并绑定到饼图。示例代码如下(假设你使用Knockout.js作为ViewModel框架,可根据你实际用的框架调整):

function myPieChartModel() {
    var self = this;
    // 声明饼图数据源的可观察数组
    self.pieChartData = ko.observableArray([]);

    // 发起API请求,在回调内处理数据
    $.getJSON('https://restcountries.eu/rest/v2/all')
        .done(function(apiResponse) {
            // 第一步:把原始数据转换成饼图需要的格式(比如按区域统计国家数量)
            var regionCountMap = {};
            apiResponse.forEach(function(country) {
                // 处理无区域信息的国家,归类到Unknown
                var region = country.region || 'Unknown';
                regionCountMap[region] = (regionCountMap[region] || 0) + 1;
            });

            // 第二步:转换成饼图组件能识别的结构
            var formattedData = Object.entries(regionCountMap).map(function([regionName, count]) {
                return { name: regionName, value: count };
            });

            // 第三步:绑定数据到饼图
            self.pieChartData(formattedData);
        })
        .fail(function(jqXHR, textStatus, error) {
            console.error('获取国家数据失败:', error);
        });
}

2. 确保变量正确声明

如果一定要在回调外部使用数据,必须提前用let/const/var声明data变量,同时要通过Promise或者回调确保数据加载完成后再执行后续逻辑:

function myPieChartModel() {
    var self = this;
    let data; // 提前声明变量

    $.getJSON('https://restcountries.eu/rest/v2/all')
        .done(function(response) {
            data = response;
            // 数据加载完成后再调用饼图绑定逻辑
            self.bindPieChartData();
        });

    self.bindPieChartData = function() {
        // 这里安全使用data变量
        // ...处理数据并绑定到饼图
    }
}

3. 验证API请求有效性

可以先在浏览器控制台直接执行$.getJSON('https://restcountries.eu/rest/v2/all'),确认API能正常返回数据,排除请求地址错误或接口失效的问题。

内容的提问来源于stack exchange,提问作者absoluteRango

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:22:37