Как мне создать JSONP из внешнего канала JSON? - PullRequest
1 голос
/ 12 января 2011

У меня есть два домена: www.domain1.com и www.domain2.com

У меня есть простой канал JSON для домена 1.

Я хочу получить канал JSON из домена1 иПоместите его в модуль на domain2.

Из того, что я прочитал, способ сделать это - использовать JSONP, но как это сделать?Есть ли способ сделать это только с помощью JQuery / Javascript?Или мне придется использовать серверный код (я использую Coldfusion).Также я мог бы просто использовать .getJSON, а не .ajax (я новичок, поэтому я еще не использовал .ajax)

EDIT Хорошо, я все еще запутался.Просто добавление обратного вызова в конце URL сломало его.Как я могу сделать так, чтобы вместо удаленного пути для ленты я выбирал абсолютный путь, где этот код находится на www.domain2.com, а канал - на www.domain1.com?

var feed ="/event/json.tag/tag/sports/";

$.getJSON(feed,function(data) {

   $.each(data.items, function(i,obj) {

       do something here...
   }        

}

Ответы [ 3 ]

1 голос
/ 12 января 2011

JSONP - это просто функция обратного вызова, обернутая вокруг объекта JSON.Общее соглашение состоит в том, чтобы иметь конечную точку, которая возвращает JSON, если в запросе не определен параметр обратного вызова и не возвращает JSONP в этом случае.

, т.е. http://www.domain1.com/api/getStuff может возвращать:

{'foo': 'bar', 'fizz': 'buzz'}

затем http://www.domain1.com/api/getStuff?cb=cb123 должно вернуться:

cb123({'foo': 'bar', 'fizz': 'buzz'});

Я не знаю ColdFusion, но я предполагаю, что этот пример хорош: http://www.coldfusionjedi.com/index.cfm/2009/3/11/Writing-a-JSONP-service-in-ColdFusion

Там нет клиента-единственное решение, если кто-то еще не встроил поддержку JSONP в сервер, с которым вы работаете ...

0 голосов
/ 12 января 2011

Чтение документации jQuery $.ajax и $.getJSON будет хорошим началом, в любом случае, есть много хороших руководств по jsonp, this Например, это отличный учебник:

$.getJSON("http://api.oscar.aol.com/presence/get?k=key&f=json&t=aimuser&c=?",
   function(result){
      if (result.response.data.users[0].state == 'online') {
       $("#status").css("background-image", "url('online.jpg')");
      }
   }
);

Как упомянуто на сайте:

Параметр f сообщает службе, что формат для возврата результатов в - JSON в нашем случае. Параметр c указывает обратный вызов JSON для использования - это важный!

А в документации по jQuery:

Если URL содержит строку "Обратный вызов =?" (или аналогичный, как определено серверным API), запрос вместо этого обрабатывается как JSONP.

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

РЕДАКТИРОВАТЬ: еще один хороший пример .

EDIT2:
Если не указать значение обратного вызова, jQuery назначит его для вас (со страницы $ .getJSON), URL-адрес flickr станет:

http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=jsonp1294786450519&tags=cat&tagmode=any&format=json

И ответ:

jsonp1294786450519({
        "title": "Recent Uploads tagged cat",
        "link": "http://www.flickr.com/photos/tags/cat/",
        "description": "",
        "modified": "2011-01-11T22:47:12Z",
        "generator": "http://www.flickr.com/",
        "items": [
       { .... rest of json

Так что вам нужно обернуть свой JSON обратным вызовом, отправленным с domain1

0 голосов
/ 12 января 2011

Вы можете извлечь JSON-фид из домена1 и передать эти данные в качестве параметра своей собственной функции Javascript (в домене2), когда ваш запрос будет завершен (onComplete / onSuccess).

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