search

Home  >  Q&A  >  body text

javascript - 新手问个问题,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

阿神阿神2896 days ago387

reply all(2)I'll reply

  • 阿神

    阿神2017-04-10 13:14:52

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

    简单滴说,如果你有一个 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/

    reply
    0
  • 怪我咯

    怪我咯2017-04-10 13:14:52

    这问题该进101的举爪

    reply
    0
  • Cancelreply