Получать данные с помощью вызова асинхронного JavaScript - PullRequest
0 голосов
/ 10 января 2012

Я хочу запросить данные у конечной точки веб-службы (скажем, "http://www.hello.com"), используя javascript.

После ее получения будет функция обратного вызова для обработки ответа (которая будетОбъект JSON)

Как мне написать его? Скелетный код подойдет.

Будет ли это что-то вроде:

<script>

function callback(data)
{
    // the response text would be processed here.
}
       url="http://www.endpoint.com";
       var script = document.createElement('script');
       script.src = url;
       script.onload=callback;
       document.body.appendChild(script);        
</script>

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

Ответы [ 2 ]

1 голос
/ 10 января 2012

Как отмечено @ JuicyScripter в комментарии выше ...

"API Викимедиа, который используется в Википедии, поддерживает аргумент обратного вызова JSONP."

Это означает, что вы можете добавить обратный вызов к запросу ...

var url = "http://en.wikipedia.org/w/api.php?action=query&prop=info|revisions&intoken=edit&titles=Main%20Page&format=json&callback=my_callback";

Обратите внимание, что в конце я добавил &callback=my_callback.Что произойдет, это то, что вместо отправки ответа в формате JSON, например ...

{
    query: {
        pages: {
            15580374: {
                ...
            }
        }
    }
}

... теперь он будет заключен в вызов функции.Это будет действительный JavaScript, поэтому ваш запрос script выполнит функцию и передаст данные.

my_callback({
    query: {
        pages: {
            15580374: {
                ...
            }
        }
    }
});

Так что все, что вам нужно, это функция обратного вызова, имя которой совпадает с именем, которое вы дали в функциизапрос ...

function my_callback( data ) {
    console.log( data );
}

Убедитесь, что эта функция доступна глобально.

Затем избавьтесь от строки onload, и ваш код должен просто работать ...

var url = "http://en.wikipedia.org/w/api.php?action=query&prop=info|revisions&intoken=edit&titles=Main%20Page&format=json&callback=my_callback";
var script = document.createElement('script');
script.src = url;
document.body.appendChild(script);     

Когда скрипт прибудет и запустится, он вызовет вашу функцию, передав ей запрошенные данные.

1 голос
/ 10 января 2012

Вы должны взглянуть на примеры здесь: http://api.jquery.com/jQuery.getJSON/

Это даст вам все необходимое для начала работы и многое другое, следующий пример был взят по ссылке:

$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?",
  {
    tags: "cat",
    tagmode: "any",
    format: "json"
  },
  function(data) {
    $.each(data.items, function(i,item){
      $("<img/>").attr("src", item.media.m).appendTo("#images");
      if ( i == 3 ) return false;
    });

Здесь запрос на получение jSON отправляет 3 параметра: tags, tagmode и format в URL-адресе в виде запроса GET (аналогично http://mysite.com? Name = me & mood = happy ).

function(data) обрабатывает результаты запроса

Для получения более подробной информации и примеров прочитайте ссылку.

...