2013-11-19 4 views
1

Я пытаюсь загрузить некоторые данные Reddit для поиска на основе URL-адреса, и я продолжаю получать ошибку Uncaught SyntaxError: Unexpected token : в строке 1 submit.json. Я открыл submit.json в инспекторе и проверил - JSON действителен. Итак, что я делаю неправильно? Я пробовал демонстрацию для таких вещей, как поиск субредда, и этот формат работает отлично, он просто не работает для поиска.Получение JSON из API поиска Reddit

function loadReddit() { 
    var exampleURL = "http://www.reddit.com/submit.json?url=http://www.youtube.com/watch?v=e4dT8FJ2GE0&sort=comments"; 
    $.ajax({ 
    url: exampleURL, 
    dataType: "jsonp", 
    success: function(data) { 
     console.log(data); 
    }  
    }); 
} 

Я отправил скрипку here с кодом, не стесняйтесь редактировать, если вы чувствуете, что это необходимо.

ответ

1

Проблема в том, что вы делаете запрос JSONP, но API дает вам простой ответ JSON. В JSONP ответ JSON завернут в вызов функции, и это согласуется с тем, что имя функции задается параметром URL callback. jQuery генерирует этот параметр для вас, но, к сожалению, API Reddit игнорирует его.

Мне пришлось в Google «Reddit API JSONP» выяснить это, но оказывается, что Reddit ожидает, что параметр будет называться jsonp вместо callback. Таким образом, решение использовать опцию jsonp сказать Jquery поставить имя обратного вызова в jsonp параметра:

var resourceUrl = "http://www.reddit.com/submit.json", 
    params  = { url: "http://www.youtube.com/watch?v=e4dT8FJ2GE0", 
        sort: "comments" } 
; 

$.ajax({ 
    url: resourceUrl, 
    data:  params, // let jQuery deal with URL parameters for you 
    dataType: "jsonp", 
    jsonp: "jsonp", // the name of the URL parameter for jQuery to give the 
         // callback function's name in  
    success: function(data) { 
    console.log(data); 
    }  
}); 

Это приведет к JQuery делает вызов на URL, как это:

http://www.reddit.com/submit.json 
    ? jsonp = jQuery202033503812667913735_1384877326437 
    & url = http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3De4dT8FJ2GE0 
    & sort = comments 
    & _  = 1384877326438 

jsonp и _ параметры случайным образом генерируются jQuery. (_ предназначен для того, чтобы заставить браузер сделать новый запрос вместо кэшированного результата предыдущего запроса. Это documented под и может управляться параметром кеша.)

+1

Спасибо. Отличное решение и объяснение. Очень признателен. – ahollenbach

Смежные вопросы