首页 > 新手问个问题,js的jsonp作用域局部变量如何传至全局变量。

新手问个问题,js的jsonp作用域局部变量如何传至全局变量。

    $.getJSON(
    "http://www.pm25.in/api/querys/aqi_ranking.json?token&callback=?",
    function(data){
    var i = data.length;
    var m = 0;
    var str;
    for(var y=0; y<i; y++){ m++;
    str += "<tr><td>"+m+"</td><td>"
    +data[y].area+"</td><td>"+data[y].aqi+"</td><td>"
    +data[y].quality+"</td><td>"+data[y].primary_pollutant+"</td><td>"
    +data[y].pm2_5+"</td><td>"+data[y].pm10+"</td><td>"+data[y].co+"</td><td>"
    +data[y].no2+"</td><td>"+data[y].o3+"</td><td>"
    +data[y].o3_8h+"</td><td>"+data[y].so2+"</td>";
    $('tbody[rank="2"]').html(str);}
    $(function(){$('.container2').highcharts({
    chart:{type:'column',margin:[ 50,50,100,80]},
    title:{text:'全国实时空气质量指数(AQI) 前十名'},
    xAxis:{categories:[
    data[0].area,data[1].area,data[2].area,
    data[3].area,data[4].area,data[5].area,
    data[6].area,data[7].area,data[8].area,
    data[9].area,data[10].area,data[11].area,
    data[12].area,data[13].area,data[14].area,
    data[15].area,data[16].area,data[17].area,
    data[18].area,data[19].area],
    labels:{rotation:-45,align:'right',
    style:{fontSize:'13px',
    fontFamily:'Verdana,sans-serif'}}},
    yAxis:{min:0,title:{text:'数据来源于国家环境保护部网站'}},
    legend:{enabled: false},
    series:[{name:'AQI',
    data:[data[0].aqi,data[1].aqi,
    data[2].aqi,data[3].aqi,data[4].aqi,
    data[5].aqi,data[6].aqi,data[7].aqi,
    data[8].aqi,data[9].aqi,data[10].aqi,
    data[11].aqi,data[12].aqi,data[13].aqi,
    data[14].aqi,data[15].aqi,data[16].aqi,
    data[17].aqi,data[18].aqi,data[19].aqi],
    dataLabels:{enabled:true,
    rotation:-90,color:'#FFFFFF',
    align:'right',x:4,y:10,
    style:{fontSize: '13px',
    fontFamily:'Verdana,sans-serif',
    textShadow:'0 0 3px black'}}}]});});});

alert(data[0].area);//没定义

有尝试过:
1、在jsonp作用域内定义:var Str;window.Str = data;
然后在全局Str也是没有定义的!
2 var Str;Str = $(function(){$('.container2').highcharts({ 
...
return data;
})
全局的Str仍然没有定义的!

更新代码:

window.dataSet = {};
$.getJSON(
"http://www.pm25.in/api/querys/aqi_ranking.json?token=pFgCuwyEQJzqzuZ1wnSm&callback=?",
function(data){
var i = data.length;
var m = 0;
var str;
for(var y=0; y<i; y++){ m++;
str += "<tr><td>"+m+"</td><td>"
+data[y].area+"</td><td>"+data[y].aqi+"</td><td>"
+data[y].quality+"</td><td>"+data[y].primary_pollutant+"</td><td>"
+data[y].pm2_5+"</td><td>"+data[y].pm10+"</td><td>"+data[y].co+"</td><td>"
+data[y].no2+"</td><td>"+data[y].o3+"</td><td>"
+data[y].o3_8h+"</td><td>"+data[y].so2+"</td>";
$('tbody[rank="2"]').html(str);}
$(function(){$('.container2').highcharts({
chart:{type:'column',margin:[ 50,50,100,80]},
title:{text:'全国实时空气质量指数(AQI) 前十名'},
xAxis:{categories:[
data[0].area,data[1].area,data[2].area,
data[3].area,data[4].area,data[5].area,
data[6].area,data[7].area,data[8].area,
data[9].area,data[10].area,data[11].area,
data[12].area,data[13].area,data[14].area,
data[15].area,data[16].area,data[17].area,
data[18].area,data[19].area],
labels:{rotation:-45,align:'right',
style:{fontSize:'13px',
fontFamily:'Verdana,sans-serif'}}},
yAxis:{min:0,title:{text:'数据来源于国家环境保护部网站'}},
legend:{enabled: false},
series:[{name:'AQI',
data:[data[0].aqi,data[1].aqi,
data[2].aqi,data[3].aqi,data[4].aqi,
data[5].aqi,data[6].aqi,data[7].aqi,
data[8].aqi,data[9].aqi,data[10].aqi,
data[11].aqi,data[12].aqi,data[13].aqi,
data[14].aqi,data[15].aqi,data[16].aqi,
data[17].aqi,data[18].aqi,data[19].aqi],
dataLabels:{enabled:true,
rotation:-90,color:'#FFFFFF',
align:'right',x:4,y:10,
style:{fontSize: '13px',
fontFamily:'Verdana,sans-serif',
textShadow:'0 0 3px black'}}}]});});
dataSet.some = data;});

alert(typeof dataSet.some);

弹出undefined


这问题该进101的举爪


您贴的这段代码让人看得简直想自杀……

简单滴说,如果你有一个 Ajax 请求获得的数据,和另外一个需要这些数据的地方:

$.getJSON('API', function (data) {
    // 对 data 做你想做的事儿
};

$('ELEMENT').highcharts({
    ...
    key: {
        // 这儿,你需要 data 了
    }
});

你的想法是把 data 暴露到全局去,这样任何地方都能拿得到,对吧?其实不需要,把业务逻辑单独封装,然后拿到数据之后运行它,把数据传进去。

$.getJSON('API', function (data) {
    // 对 data 做你想做的事儿
    ...
    // 运行你的业务,把 data 传给它
    dosome(data);
};

function doSome(data) {
    $('ELEMENT').highcharts({
        ...
        key: data    // 这儿,你需要 data 了,它就是传进来的
    });
}

当然,这么写太恶心了,丝毫没有组织性,不过只是一小段片段的话,你能明白意思就好。

附图:

http://jsfiddle.net/nightire/QuAsn/embedded/

【热门文章】
【热门文章】