我有这个功能:
function getReport(name,x) {
var xArr = [];
var yArr = [];
$.ajax({
async: false,
type: "POST",
//async: false,
//dataType: "json",
url: "reportAjax.php",
data: "name="+ name,
success: function(data){
var json = $.parseJSON(data);
var chartDesc = json.INFO.DESC;
$.each(json.RESULT, function(i, object) {
$.each(object, function(property, value) {
//alert(property + "=" + value);
if (property == x) {
xArr.push(value);
}
else {
yArr.push(parseInt(value));
}
});
});
}
});
console.log(xArr);
console.log(yArr);
console.log(chartDesc);
drawChart(xArr,yArr,chartDesc);
}
出于某种原因,我可以在console.log
中看到xArr
和yArr
的值,但我chartDesc is not defined
获得了chartDesc
。
如果我将console.log(chartDesc)
行移到此行var chartDesc = json.INFO.DESC
之下,我可以正确看到它。
为什么?
答案 0 :(得分:3)
您在AJAX回调函数中声明了chartDesc
变量,因此它超出了您以后引用它的范围。
要解决此问题,请从该行的开头删除var
,然后使用xArr
和yArr
变量将其声明在该函数的顶部:
var xArr = [];
var yArr = [];
var chartDesc = "";
答案 1 :(得分:1)
chartDesc
变量范围与success
函数相关联,这就是为什么在它之外,变量是undefined
。
在Javascript
函数中,为使用var
答案 2 :(得分:0)
制作你的
console.log(xArr);
console.log(yArr);
在success
函数内。并在成功函数之外解除chartDesc
变量,
控制台日志在调用函数时立即执行,但由于成功函数执行,插入xArr
和yArr
的值需要一些时间。所以你没有得到任何记录。