无法获得全局变量

时间:2014-02-18 19:24:30

标签: javascript jquery json

我的网站上有一个功能,背景根据天气而变化。如果我声明一个静态邮政编码,我可以成功更改后台,但我希望能够从用户的IP凭据中自动获取邮政编码。

我尝试合并一个脚本来获取邮政编码,效果很好,但我无法弄清楚如何将邮政编码转换为天气功能。我已经尝试声明一个全局变量,但由于某种原因它不起作用。我在控制台中收到错误:

Uncaught TypeError: Cannot read property 'text' of undefined

关于我哪里出错的任何想法?谢谢!

CODE

var zipcode;
$.getJSON("http://api.ipinfodb.com/v3/ip-city/?key=my_api_key&format=json&callback=?",
function(data){
    zipcode = data['zipCode']; //DE,AT ...
});

$(document).ready(function() {  
  $.YQL = function(query, callback) {
      $.getJSON('http://query.yahooapis.com/v1/public/yql?callback=?', { q: query, format: 'json' }, callback);
  };
  $.YQL("select * from rss where url='http://weather.yahooapis.com/forecastrss?p=" + zipcode + "'", function (data) {
     var w = data.query.results.item,
         klass = w.condition.text,
         current
         encodedclass = klass.replace(/\s+/g, '-').toLowerCase();

     $('body').addClass(encodedclass);
  });
});

1 个答案:

答案 0 :(得分:0)

试试这个:

var getZip = $.getJSON("http://api.ipinfodb.com/v3/ip-city/?key=my_api_key&format=json&callback=?", function(data){
    zipcode = data['zipCode']; //DE,AT ...
});

然后在你的文件中准备好了:

getZip.then(function() { 
    $.YQL("select * from rss where url='http://weather.yahooapis.com/forecastrss?p=" + zipcode + "'", function (data) {
        var w = data.query.results.item,
        klass = w.condition.text,
        current,    // did you miss a comma here?
        encodedclass = klass.replace(/\s+/g, '-').toLowerCase();
        $('body').addClass(encodedclass);
    })
});

以下是使用.then

的文档