пытаясь понять JSONP с примером Flickr - PullRequest
0 голосов
/ 30 июня 2011

Я пытаюсь понять, как сделать запрос json на файл json, сохраненный на моем сервере из jsfiddle.

html:

  <!DOCTYPE html>
    <html>
        <head>
        </head>
        <body>
            <div id="images">  
            </div>
        </body>
    </html>

jquery:

$.getJSON("http://www.shopsheep.com/groupon/json/test.json?jsoncallback=?", function(data) {
        $.each(data.items, function(i, item) {
            $("<img/>").attr("src", item.media.m).appendTo("#images");
            if (i == 0) {
                return false;
            }
        });
    });


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

Я скачал мерцающий json-файл и загрузил его на свой сервер как test.json.Если я вставлю его в браузер, он вернется в виде файла мерцания.

Однако когда я пытаюсь отобразить изображение, работает только оригинальный пример мерцания?Любая идея, почему это так?

http://jsfiddle.net/stofke/DJQ5g

Хорошо, я узнал, как это сделать.Функция getJSON добавляет случайное имя функции обратного вызова в jsoncallback =?что-то вроде этого jQuery160188050875203142_1309437718540&_=1309437718551 Чтобы обернуть ваш json-файл этой функцией обратного вызова, вам, конечно, нужно знать имя этой функции, поэтому, если вы преобразуете свой jsonfile в php-файл, вы можете получить имя обратного вызова-функции, например:

<?php echo $_GET["jsoncallback"];?>(
    ADD JSON CONTENT HERE 
)

Этот php-файл получает имя функции обратного вызова через переменную GET и переносит в нее содержимое json.Таким образом, он работает нормально.

1 Ответ

1 голос
/ 30 июня 2011

В вашем файле JSON отсутствует имя функции. Должно начинаться с имени функции. Если вы видите здесь http://api.flickr.com/services/feeds/photos_public.gne?format=json,, оно начинается с jsonFlickrFeed.

Ваш JSON должен быть таким:

callback({
        "title": "Uploads from everyone",
        "link": "http://www.flickr.com/photos/",
        "description": "",
        "modified": "2011-06-29T21:43:16Z",
        "generator": "http://www.flickr.com/",
        "items": [
       {....

Может быть, вам нужно больше узнать о JSONP. http://en.wikipedia.org/wiki/JSONP

...