2010-11-30 2 views
1

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

$(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 возвращает пустое.

Вы могли бы помочь?

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

Mauro

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

$.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); 
     }); 
    } 
); 

Что я делаю неправильно?

Благодаря

+0

Вы подтвердили правильность возврата объекта jsonp? Полезный инструмент для этого называется Fiddler. – 2010-11-30 16:31:47

+0

@Aaron да думаю. Попробуйте сами: http://api.tubeupdates.com/?method=get.status&lines=central,victoria&return=name&jsonp=myData – Mauro74 2010-11-30 16:34:24

ответ

2

От jQuery API:

Если URL включает строку "обратного вызова =?" (или аналогично, как определено API-интерфейсом на стороне сервера), вместо этого запрос обрабатывается как JSONP.

Я думаю, что ваш код должен выглядеть как этот

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

Извините мой английский :)

Update: для доступа к данным необходимо итерацию над result.response.lines внутри функции обратного вызова

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

Это выход URL:

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

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

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

Я не вижу собственности под названием text. Вы, наверное, имели в виду:

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

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