помогите с Jsonp и jQuery - PullRequest
       9

помогите с Jsonp и jQuery

1 голос
/ 30 ноября 2010

У меня есть веб-сервис, обслуживаемый в jsonp, но, поскольку я новичок в этом, у меня возникают трудности с получением данных.Вот мой код:

$(document).ready(function(){               
   $.getJSON("http://api.tubeupdates.com/?method=get.status&lines=central,victoria&return=name&jsonp=myData",
       function myData(result){
           $('#status').append(result.name.text);
        }
   );

});

div #status возвращается пустым.

Не могли бы вы помочь?

Заранее спасибо

Мауро

Обновление: теперь это работает!Но это не так, когда я пытаюсь зациклить данные:

$.getJSON("http://api.tubeupdates.com/?method=get.status&lines=central,victoria&return=name&jsonp=?",
         function (result){
              $.each(result.items, function(item){
                 $('#status').append(item.response.lines[0].name);
        });
     }
);

Что я делаю не так?

Спасибо

Ответы [ 2 ]

2 голосов
/ 30 ноября 2010

Это вывод URL:

myData({"response":{"lines":[{"name":"Central"},{"name":"Victoria"}]}});

Вы можете переформатировать объект, чтобы сделать его более понятным:

{
    "response": {
        "lines": [
            {"name":"Central"},
            {"name":"Victoria"}
        ]
    }
}

Я не вижу свойства с именем text. Вы, вероятно, имеете в виду:

$('#status').append(result.response.lines[0].name);

Обновление: это решение не полностью решает проблему. Как указано в принятом ответе, вам нужно дать jQuery команду генерировать случайное имя функции (вы не можете указать свое собственное, по крайней мере, с getJSON).

2 голосов
/ 30 ноября 2010

Из jQuery API :

Если URL содержит строку «callback =?»(или аналогичный, как определено серверным API), запрос обрабатывается как JSONP.

Я думаю, что ваш код должен выглядеть примерно такхитрость - это json=? часть URL.Я думаю, что jQuery на лету создает функцию для анализа данных JSONp и передает результат вашей функции обратного вызова.

Извините за мой английский :)данные, которые необходимо перебрать result.response.lines внутри функции обратного вызова

$.each(result.response.lines, function() {
    $('#status').append(this.name);
}
...