Справка JSONP (без jQuery) - PullRequest
1 голос
/ 14 мая 2011

Я изо всех сил пытаюсь выяснить, как сделать запрос JSONP, но везде, где я ищу справочные материалы, все примеры jQuery.Я могу прочитать исходный код jQuery, но мне нужен простой и понятный пример.Я собираю библиотеку для чего-то, и я не хочу включать jQuery, поэтому, пожалуйста, не jQuery $.getJSON.Я знаю, как это использовать.

Мой сервер выплевывает нормальный callback({"foo":"bar"}) ответ с content-type: application/json; charset=utf-8 MIME.

Так что если я добавлю тег сценария, как (используя Twitter сЯ ЗНАЮ, что их API работает):

<script src="http://twitter.com/users/oscargodson.json?callback=test"></script>

Или динамически.Либо работает, и я получаю JSON, следующий шаг, который я не могу понять.

Если я сделаю просто console.log(test) после загрузки сценария, я получу: Uncaught ReferenceError: test is not defined

Почему?Как после того, как я получу ответ от сервера, я передам его себе?На моем собственном сервере, если я делаю callback = {"foo":"bar"}, обратный вызов работает и возвращает объект, но не так, как описано выше.Как так?Для этого я использовал только библиотеки AJAX, но для этого проекта мне нужно самому написать код:)

Ответы [ 2 ]

3 голосов
/ 14 мая 2011

Если вы установите «callback = test», то в вашем клиентском коде должна быть функция «test», которая берет значение json с сервера и обрабатывает его для вас.

JQuery делает именно это с динамически генерируемым именем функции.

function test(data) { console.log(data) }
get_jsonp("http://www.example.com/?callback=test")
1 голос
/ 14 мая 2011

Простое включение скрипта должно сделать эту работу:

function test(res) {
    // TODO: manipulate the results here like for example showing
    // the created_at property
    alert(res.created_at);    
}

window.onload = function() {
    var script = document.createElement("script");
    script.src = 'http://twitter.com/users/oscargodson.json?callback=test';
    document.body.appendChild(script);
};

А вот живая демонстрация .

Очевидно, вы не должны забывать, что браузеры могут кэшировать статическиересурсы, такие как скрипты, поэтому, если вы хотите получить свежую информацию, вы можете адаптировать временную метку к URL.

...