Как сделать, чтобы jQuery JSON возвращал данные, доступные по всему миру, и помощь в разборе незначительных строк? - PullRequest
0 голосов
/ 09 декабря 2010

Я сделал вызов API с помощью $.getJSON, но я не знаю, как сделать возвращаемые данные доступными глобально для использования также в других функциях.

Код return в приведенном ниже коде не работает, но вместо этого, если я alert it: он работает с очарованием.

$.getJSON(url, function(timeInfo){
        return timeInfo.time;
});

Также из формата времени 2010-12-09 12:53. Как мне взять 12 (час).

Пожалуйста, помогите и извините за включение двух вопросов в один.

Детальный код:

function handle_geolocation_query(position) {
    if(position[0] == 'Yes'){
        var url = "http://ws.geonames.org/findNearByWeatherJSON?lat=" + position[1] + "&lng=" + position[2] + "&callback=?";
    } else {
        var url = "http://ws.geonames.org/findNearByWeatherJSON?lat=" + position.coords.latitude + "&lng=" + position.coords.longitude + "&callback=?";
    }
    $.getJSON(url, function(weatherInfo){
        var clouds = weatherInfo.weatherObservation.clouds;
        var weather = weatherInfo.weatherObservation.weatherCondition;
        var time = getTimeInfo(position);
        if(time.getHours()>=6 && time.getHours()<=18){
            var weatherClass = placeImageDay(clouds, weather);
            $('#weatherImage').show().addClass(weatherClass);
        } else {
            var weatherClass = placeImageNight(clouds, weather);
            $('#weatherImage').show().addClass(weatherClass);
        }
    });
}

function getTimeInfo(position){
    if(position[0] == 'Yes'){
        var url = "http://ws.geonames.org/timezoneJSON?lat=" + position[1] + "&lng=" + position[2] + "&callback=?";
    } else {
        var url = "http://ws.geonames.org/timezoneJSON?lat=" + position.coords.latitude + "&lng=" + position.coords.longitude + "&callback=?";
    }
    $.getJSON(url, function(timeInfo){
        return timeInfo.time;
    });
}

Ответы [ 2 ]

3 голосов
/ 09 декабря 2010

Вы можете передавать данные другим функциям и объектам из функции обратного вызова success в $.getJSON().Вы можете создать глобальный объект или функцию:

var MYWEBSITE = { data: {} };
var myGlobalFunction = function(data) { 
  alert("The time I got is: " + data.time);
};

$.getJSON(url, function(timeInfo) {

  // set the data property on MYWEBSITE
  MYWEBSITE.data = timeInfo;

  // execute the function and pass the parameter
  myGlobalFunction(timeInfo);
});

EDIT : Добавлен пример передачи глобальных функций в качестве второго параметра

Вы также можете передать глобальную функцию в качестве второго параметра:

var globalFunction = function(data) { ... };

$.getJSON(url, globalFunction);

Таким образом, globalFunction получает все, что возвращается в ответе.

РЕДАКТИРОВАТЬ 2 : Добавлен пример регулярного выражения для извлечения времени

Чтобы извлечь часовую часть даты, вы можете использовать регулярное выражение для сопоставления компонентов:

var time = "2010-12-09 12:53", hour = "";
var timeMatcher = /^([0-9]{4}-[0-9]{2}-[0-9]{2})\s([0-9]{2}):([0-9]{2})$/;
if(timeMatcher.test(time)) {
  hour = timeMatcher.match(time)[2]; // finds the second brace, hour should contain "12"
}

Длябольше информации, см. http://en.wikipedia.org/wiki/Regular_expression

0 голосов
/ 09 декабря 2010

Это асинхронный вызов, и вы не можете вернуть такое значение, как, например, он просто создает экземпляр процесса, и все, что вы хотите сделать внутри обработчика возврата

   $.getJSON(url, function(timeInfo){
            processData(timeInfo)
    });

function processData(Info)
{
///do acess them here
}
...