2014-02-18 3 views
0

У меня есть функция на моем сайте, где фон меняется в зависимости от погоды. Я могу успешно изменить фон, если объявить статический почтовый индекс, но я хочу, чтобы иметь возможность автоматически извлекать почтовый индекс из учетных данных пользователя.Не удалось получить глобальную переменную

Я попытался включить скрипт для получения почтового индекса, который работает хорошо, но я не могу понять, как получить почтовый индекс в функцию погоды. Я попытался объявить глобальную переменную, но по какой-то причине она не работает. Я получаю сообщение об ошибке в консоли:

Uncaught TypeError: Cannot read property 'text' of undefined.

Любые мысли о том, где я ошибся? Благодаря!

КОД

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

Ваша проблема в том, что вызов для получения zipcode является асинхронным. Сделайте звонок, чтобы получить прогноз погоды от вашего обратного вызова или используйте «.then», чтобы связать свой звонок, чтобы получить погоду в конце вызова, чтобы получить zipcode. –

+1

Предполагается, что текущее должно быть на линии без назначения или запятой? – Skrivener

+0

@Skrivener Смешно, я этого никогда не замечал. Я думал, что это была опечатка в моем посте сначала, но мой фактический код тот же самый путь и функции правильно ... –

ответ

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

+0

Это сработало отлично, спасибо! –

Смежные вопросы