我在返回JSON对象时遇到了问题,而我得到的只是一个未定义的变量。
此代码应该从API返回json元素。它似乎在成功:功能,但一旦我尝试将数据带到别处,它只显示'undefined'
var datas;
datas = getdata();
//getdata();
createChart(datas)
alert('2datass'+datas); // this returns undefined
function createChart(data){
alert(data); //outputs undefined
}
function getdataaa(){
alert('ajax');
$.ajax({
type: "GET",
dataType: "json",
url: "API URL",
success: function(data){
alert(data); // WORKS! and outputs my JSON data
/*
for(var i =0;i <= data.length-1;i++)
{
var item = data[i];
datas = datas + {
type: 'column',
name: item.name,
data: [item.difference]
};
}
*/
//Neither of these returns seems to work
return jQuery.parseJSON(data);
return data;
}
});
};
任何帮助都将不胜感激。
解
感谢所有帮助过的人。
这似乎可以解决问题
var datas;
datas = getData();
//getdata();
alert('2datass'+datas);
console.log(datas);
createChart(datas);
function createChart(data){
alert('createChart'+data);
var dynamicData;
for(var i =0;i <= data.length-1;i++)
{
var item = data[i];
dynamicData = dynamicData + {
type: 'column',
name: item.name,
data: [item.difference]
};
}
alert('dynamic' +dynamicData); // works, but says undefined before - outputs dynamic undefined[object Object][object Object][object Object][object Object][object Object]
var series = [dynamicData,{
type: 'column',
name: 'Jane',
data: [300, 30]
}, {
type: 'column',
name: 'John',
data: [-200, 50]
}, {
type: 'column',
name: 'Joe',
data: [444, -25]
}, {
type: 'column',
name: 'Jobe',
data: [444, -25]
}, {
type: 'column',
name: 'Jooe',
data: [444, -25]
},{
type: 'column',
name: 'Jane',
data: [300, 30]
}
, {
type: 'pie',
name: 'Total consumption',
data: [{
name: 'Jane',
y: 13
//color: '#4572A7' // Jane's color
}, {
name: 'John',
y: 23
//color: '#AA4643' // John's color
}, {
name: 'Joe',
y: 19
//color: '#89A54E' // Joe's color
}],
center: [30, 80],
size: 100,
showInLegend: false,
dataLabels: {
enabled: false
}
}];
var options = {
chart: {
renderTo: 'container'
},
title: {
text: 'Account Managers Leaderboard'
},
xAxis: {
categories: ['Month on Month', 'Day on Day']
},
tooltip: {
formatter: function() {
var s;
if (this.point.name) { // the pie chart
s = ''+
this.point.name +': '+ this.y +' sales';
} else {
s = ''+
this.x +': '+ this.y;
}
return s;
}
},
labels: {
items: [{
html: 'Total proportion of sales <br />this month',
style: {
left: '40px',
top: '-5px',
color: 'black'
}
}]
},
series: series
};
$(document).ready(function() {
var chart;
chart = new Highcharts.Chart(options);
});
}
function getData(){
//alert('ajax');
var receivedData; // store your value here
$.ajax({
type: "GET",
dataType: "json",
url: "API URL",
async: false,
success: function(data){
alert('data'+data); //works
receivedData = data;
}
});
return receivedData;
};
答案 0 :(得分:1)
默认情况下,AJAX调用是异步的,您必须使用以下方法从ajax调用返回响应:
function getdataaa() {
return $.ajax({
type: "GET",
dataType: "json",
url: "API URL",
async: false // NOTICE THIS
}).responseText; // AND THIS
};
我不确定responseText是否会被解析或解析为JSON,但是看看你从那里得到了什么。
答案 1 :(得分:0)
而不是:
return jQuery.parseJSON(data);
OR
return data;
直接调用createChart
函数:
createChart(data)
答案 2 :(得分:0)
问题是您从success
函数返回,而不是getdataaa
函数。 getdataaa
没有return语句,因此默认返回undefined
。返回语句是指最近的函数。
success: function(data){
alert(data); // WORKS! and outputs my JSON data
...
//Neither of these returns seems to work
return jQuery.parseJSON(data);
return data;
}
这就是你得到的。您可以使用这样的闭包来获得结果:
function getdataaa(){
alert('ajax');
var receivedData; // store your value here
$.ajax({
type: "GET",
dataType: "json",
url: "API URL",
async: false,
success: function(data){
alert(data);
// ...
receivedData= data;
}
});
return receivedData;
};