Сбой обратного вызова JSONP, нужна помощь с javascript / jquery - PullRequest
2 голосов
/ 21 июля 2009

Я новичок в json (немного знаю jquery) .... и пытаюсь заставить работать крошечный скрипт Я хочу получить время на определенном лат / лнг и составил этот скрипт в битах из того, что я прочитал онлайн:

$.getJSON("http://ws.geonames.org/timezoneJSON?lat=47.01&lng=10.2&callback=?", 

    { 'uID': 1 }, 

    function(data) {
        $.each(data, function(i, item) {
            $("<span/>").html(item.time).html(".nowtime");
        });
    });

Излишне говорить, что это не работает ... кто-то может мне помочь, а также объяснить, что $ ( ""). HTML (item.time) .html ( "nowtime".); средства. (Я не понимаю, что первое)

Вот ссылка на источник json: http://www.geonames.org/export/web-services.html#timezone

спасибо

Ответы [ 3 ]

3 голосов
/ 21 июля 2009

Первоначально я думал, что проблема, скорее всего, в той же политике происхождения . Чтобы выполнить запрос AJAX к URL-адресу, он должен находиться в том же домене (и порту), что и страница, содержащая код Javascript.

Но после исправления Георга IV я проверил это.

Объект data, возвращаемый в обратном вызове, является объектом с JSON-удалением и не является массивом. Скорее всего, ваш код должен был прочитать что-то вроде:

$.getJSON("http://ws.geonames.org/timezoneJSON?lat=47.01&lng=10.2&callback=?", 
  { 'uID': 1 }, 
  function(data) {
    $("<span/>").html(data.time); // Or maybe with a different selector (see below)
  }
);

Селектор, вероятно, также неверен. Вы можете, например, поместить результат в div с идентификатором test. В этом случае строка, содержащая селектор, должна быть изменена на:

$("#test").html(data.time);

Это говорит о том, что получите объект с идентификатором test (знак хеша (#) указывает, что это идея) и обновите содержимое, указав для data.time значение.

1 голос
/ 21 июля 2009

Код span создает элемент span, а затем устанавливает его HTML в качестве возвращаемого значения времени. Однако код выглядит неправильно, так как он сразу устанавливает HTML в «.nowtime», но никогда не добавляет его в DOM. Я предполагаю, что последний .html ('. Nowtime') действительно должен быть .addClass ('. Nowtime'), и где-то там должен быть .appendTo (???), но я не уверен, где вы должен добавить его.

EDIT

Кроме того, я не думаю, что вам нужна каждая функция. Похоже, что он перебирает членов объекта данных. Вы хотите, чтобы он использовал свойство time напрямую.

Пример (хотя вы, вероятно, хотите, чтобы он был добавлен в DOM в другом месте):

$(function() {
    $.getJSON("http://ws.geonames.org/timezoneJSON?lat=47.01&lng=10.2&callback=?", { 'uID': 1 }, function(data) {
        $("<span/>").html(data.time).appendTo('body');
    });
});

Примечание: если ваш вызов JSONP должен был возвращать массив объектов , то вам нужно было бы перебирать их с каждым методом. Я недостаточно знаю об услуге, чтобы знать, существуют ли методы, которые возвращали бы массив объектов. Этот звонок, однако, не.

0 голосов
/ 21 июля 2009

Ты не очень понимаешь, что не так. Обратный вызов, кажется, пытается получить поле nowtime и поместить его в элемент управления на странице. Я думаю это:

$("").html

Должен иметь селектор в двойных кавычках, чтобы сказать, куда идет результат. Что-то вроде $ ("# myfield") ....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...