尝试用flickr示例来理解jsonp

时间:2011-06-30 08:24:35

标签: json jquery jsonp

我正试图了解如何从jsfiddle向我的服务器上存储的json文件发出json请求。

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文件,你可以得到这样的callbackfunctionname:

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

这个php文件将通过GET变量获取回调函数的名称,并用它包装json内容。这样就可以了。

1 个答案:

答案 0 :(得分:1)

您的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