Не удается получить данные из запроса JSON, хотя я знаю, что он возвращен - PullRequest
4 голосов
/ 08 декабря 2011

Я пытаюсь получить данные, возвращаемые из getJSON, но я просто не могу заставить их работать.Я пробовал тот же код с API search.twitter, и он отлично работает, но он не работает с другим сайтом.Я знаю, что данные возвращаются, потому что я могу найти их при использовании Инспектора.Значения, которые я нахожу через Инспектора:

[{"id":62093,"type":"Song","artist":{"id":12382,"type":"Artist","nameWithoutThePrefix":"Tallest Man On Earth","useThePrefix":true,"name":"The Tallest Man On Earth"},"title":"It Will Follow The Rain"},{"id":62094,"type":"Song","artist":{"id":12382,"type":"Artist","nameWithoutThePrefix":"Tallest Man On Earth","useThePrefix":true,"name":"The Tallest Man On Earth"},"title":"Pistol Dreams"},{"id":62095,"type":"Song","artist":{"id":12382,"type":"Artist","nameWithoutThePrefix":"Tallest Man On Earth","useThePrefix":true,"name":"The Tallest Man On Earth"},"title":"Troubles Will Be Gone"},{"id":80523,"type":"Song","artist":{"id":12382,"type":"Artist","nameWithoutThePrefix":"Tallest Man On Earth","useThePrefix":true,"name":"The Tallest Man On Earth"},"title":"Love Is All"},{"id":80524,"type":"Song","artist":{"id":12382,"type":"Artist","nameWithoutThePrefix":"Tallest Man On Earth","useThePrefix":true,"name":"The Tallest Man On Earth"},"title":"I Won't Be Found"},{"id":80525,"type":"Song","artist":{"id":12382,"type":"Artist","nameWithoutThePrefix":"Tallest Man On Earth","useThePrefix":true,"name":"The Tallest Man On Earth"},"title":"Where Do My Bluebird Fly"},{"id":80526,"type":"Song","artist":{"id":12382,"type":"Artist","nameWithoutThePrefix":"Tallest Man On Earth","useThePrefix":true,"name":"The Tallest Man On Earth"},"title":"Sparrow And The Medicine"},{"id":80527,"type":"Song","artist":{"id":12382,"type":"Artist","nameWithoutThePrefix":"Tallest Man On Earth","useThePrefix":true,"name":"The Tallest Man On Earth"},"title":"Into The Stream"},{"id":81068,"type":"Song","artist":{"id":12382,"type":"Artist","nameWithoutThePrefix":"Tallest Man On Earth","useThePrefix":true,"name":"The Tallest Man On Earth"},"title":"The Blizzards Never Seen The Desert Sands"}]

Итак, я знаю, что они возвращаются с сервера.

и мой код js:

function searchSongsterrForTab(){
    var artist = "\"The Tallest Man On Earth\""
    var url = "http://www.songsterr.com/a/ra/songs/byartists.json?callback=?&artists=" + artist;

    $.ajax({
        url: url,
        dataType: 'jsonp',
        success: function(data){
            $.each(data, function(i, item){
                console.log(item);
            });
        }
    });
}

IЯ пробовал все виды различного кода, но я просто не могу напечатать значения.

Вся помощь действительно ценится!

Ответы [ 3 ]

1 голос
/ 08 декабря 2011

Вы указали dataType как jsonp, но служба просто возвращает json, который вы не можете использовать кросс-домен.

Сообщение об ошибке jQuery: "jQuery1710014922410249710083_1323288745545 was not called", что означает, что обратный вызов не вызываетсякак и должно быть.

Обновление:

Существует способ получения данных, даже если служба не поддерживает формат JSONP.См. эту ссылку для подробностей.

Мой пример использует jquery.xdomainajax.js скрипт, который направляет запрос ajax на YQL , который может извлечь целую HTML-страницу в формате JSONP .Поэтому в приведенном ниже примере используется обычная HTML-страница для извлечения данных.

  • Плюсы:
    • Вы можете получить любое содержимое HTML.
    • Это очень гибкопоскольку вы не зависите от того, что веб-служба может вам дать.
  • Минусы:
    • Это медленнее, потому что вы используете сервис Yahoo для обработки и извлечения целых HTML-данных.
    • Также передается больше данных.

См. THIS фрагмент для рабочего примера.

Код:

var artist = "The Tallest Man On Earth";

$.ajax({
  url: 'http://www.songsterr.com/a/wa/search?pattern=' + escape(artist),
  type: 'GET',
  success: function(res) {
    // see http://www.songsterr.com/a/wa/search?pattern=The%20Tallest%20Man%20On%20Earth
    // 1) res.responseText => get HTML of the page
    // 2) get odd anchors inside (it is zero-indexed) => get anchors containing song names
    // 3) map array of anchor elements into only their text => get song names
    var songs = $(res.responseText).find('div.song a:odd').map(function(i, el) { return $(el).text() });
    console.log(songs);
  }
});

Это всего лишь демонстрация.Если вам нужны какие-либо другие данные со страницы, проверьте структуру страницы, извлеките их и обработайте, как показано в примере выше.

0 голосов
/ 08 декабря 2011

Songsterr не поддерживает JSONP. Это означает, что данные не оборачиваются заданной функцией обратного вызова.

0 голосов
/ 08 декабря 2011

Может быть, вы пострадали от междоменного нарушения?Вы не можете просто получить доступ к любой веб-службе со случайной веб-страницы, размещенной на другом сервере.

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