Разбор JSON YQL-вывода с добавлением jQuery к идентификаторам - PullRequest
1 голос
/ 28 марта 2012

У меня есть строка JSON для вывода YQL по этому URL: YQL JSON

Я нашел другое

Я пытаюсь понять, почему я не могу получить определенные элементы из возврата JSON. Например, используя jQuery, если я хочу первые DIVs H1, я использую:

$.ajax({
       url:"http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20html%20where%20url%3D%22http%3A%2F%2Fwww.missoulaavalanche.org%2Fcurrent-advisory%2F%22%20and%20xpath%3D'%2F%2Fdiv%5B%40id%3D%22content%22%5D%2Fdiv%5B1%5D'&format=json",
       dataType: 'jsonp',
       jsonp: 'callback',
       jsonpCallback: 'cbfunc'
    });
    function cbfunc(data){
      var id = data.query.results.div;

      $('#table').append('<li>'+id.h1+'</li>');

  $('#table').listview('refresh');
}       

Я пытался получить некоторую информацию, скажем, img alt или img src, из второго div ... div 1 примерно так:

function cbfunc(data){
      var id = data.query.results.div[1];

      $('#table').append('<li>'+id.img.alt+'</li>');

      $('#table').listview('refresh');
    }

Я получаю неопределенный результат или нет результатов ... Чего я не понимаю или не понимаю о получении результатов из списка JSON yql?

РЕДАКТИРОВАТЬ: Я прочитал в блоге YQL пост о 1013 * Custing ... Так что я использую их предложение там.

РЕДАКТИРОВАТЬ 2: вот JSON от yql. Я хотел бы получить div img src, например, но я не получаю возврат или я получаю объект. Я думаю, что это будет data.query.results.div 1 .img.src

Я получаю data.query.results.div.h1 без проблем:

cbfunc({
 "query": {
  "count": 1,
  "created": "2012-03-28T15:36:28Z",
  "lang": "en-US",
  "results": {
   "div": {
    "id": "content",
    "div": [
     {
      "class": "post-2491 post type-post status-publish format-standard hentry category-advisories",
      "id": "post-2491",
      "h1": "March 26, 2012 Avalanche Advisory",
      "p": {
       "class": "postmetadata alt",
       "small": {
        "br": [
         null,
         null
        ],
        "a": {
         "href": "http://www.missoulaavalanche.org/category/advisories/",
         "rel": "category tag",
         "title": "View all posts in Advisories",
         "content": "Advisories"
        },
        "content": "This entry was posted on Monday, March 26th, 2012 at 6:55 am\n Categories: \n"
       }
      },
      "div": [
       {
        "id": "danger_rating",
        "a": {
         "href": "http://www.missoulaavalanche.org/wp-content/themes/missoula-avalanche/images/ratings/avalanche_danger_scale.jpg",
         "img": {
          "alt": "Current Danger Rating is MODERATE",
          "src": "http://www.missoulaavalanche.org/wp-content/themes/missoula-avalanche/images/ratings/moderate.gif"
         }
        }
       },
       {

Ответы [ 2 ]

2 голосов
/ 28 марта 2012

Параметр функции jsonp просто определяет, какое имя сервера функций использует для оболочки для jsonp.

Чтобы получить доступ к вашим данным, вам необходимо сделать это при успешном обратном вызове $.ajax.В приведенном выше коде отсутствует $ до .ajax

$.ajax({
    url: "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20html%20where%20url%3D%22http%3A%2F%2Fwww.missoulaavalanche.org%2Fcurrent-advisory%2F%22%20and%20xpath%3D'%2F%2Fdiv%5B%40id%3D%22content%22%5D%2Fdiv%5B1%5D'&format=json",
    dataType: 'jsonp',
    jsonp: 'callback',
    jsonpCallback: 'cbfunc',
    success: function(data) {
        var results=data.query.results;
        /* work with results object here*/

    }
});
1 голос
/ 28 марта 2012

Это проще, чем вы думаете, если вы используете jQuery.getJSON .

Попробуйте это:

$.getJSON("http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20html%20where%20url%3D%22http%3A%2F%2Fwww.missoulaavalanche.org%2Fcurrent-advisory%2F%22%20and%20xpath%3D'%2F%2Fdiv%5B%40id%3D%22content%22%5D%2Fdiv%5B1%5D'&format=json",
          function(data) {
              var id = data.query.results.div;
              $('#table').append('<li>'+id.h1+'</li>');
              $('#table').listview('refresh');
          }
);
...