функция обратного вызова для анализа JSON в JQuery - PullRequest
3 голосов
/ 18 февраля 2011

Я новичок в JQuery и, возможно, это вопрос n00b.Кроме того, мой английский не самый лучший.

Я написал сервис в своем приложении Google App Engine, который доставляет данные в формате JSON, который работает нормально, но я не смог проанализировать эти данные JSON с помощью JQuery:


var url= 'myapp.appspot.com/myservice.json?someparams';
$.getJSON(url, function(json){
    alert("Success parsing JSON");  // I never reached this code 
    ....
});

После нескольких дней чтения постов и учебных пособий я почувствовал этот слайдшер: http://www.slideshare.net/andymckay/cross-domain-webmashups-with-jquery-and-google-app-engine

Читая слайд 23, я заметил о "callback =?"и я попробовал код на слайде 42:

<code>
class MyJSONHandler(webapp.RequestHandler):
    def get(self):
        ## Retrieve some data from DB or MemCached
        jsonData = json.dumps(data)
        if self.request.get('callback'):
            self.response.out.write('%s(%s)' % (self.request.get('callback'), jsonData))
        else:
            self.response.out.write(jsonData)

А в функции JQuery:

<code>
$.getJSON(url+'&callback=?', function(json){
    alert("Success parsing JSON");  // Now i'm here !!
    ....
});

Мой вопрос:

Почему параметр callback необходим для этой работы?Какую разницу имеет значение '? ("MyJSON": [{"a-lot": "of-data"}]) "??

Спасибо вам всем.

Ответы [ 4 ]

2 голосов
/ 18 февраля 2011

Параметр callback используется для реализации JSONP .

Метод jQuery getJSON создает тег <script>, который указывает на URL, который вы ему дали.
Ожидается, что URL возвратит вызов функции, указанной в параметре callback, передав данные в качестве параметра.

В отличие от обычных запросов AJAX, запросы JSONP можно отправлять по доменам.

1 голос
/ 18 февраля 2011

Если вы получаете доступ к своему сервису из другого домена с помощью AJAX, браузер этого не допустит. Использование этого метода позволяет обойти это путем динамического встраивания тега script с атрибутом src, установленным на запрошенный URL, и тело сценария вызывает переданное вами имя функции, передавая ваши данные.

Вот отличное объяснение процесса: http://en.wikipedia.org/wiki/JSON#JSONP

0 голосов
/ 18 февраля 2011

Техника называется JSONP: JSON с отступом и используется для обхода политики того же происхождения .

0 голосов
/ 18 февраля 2011

Это называется JSONP.

Вы можете посмотреть здесь: Что такое JSONP?

Надеюсь, это поможет

...