2011-06-30 41 views
0

我試圖讓我的身邊我怎樣才能使JSON請求存儲從我的jsfiddle服務器上的JSON文件頭。試圖瞭解JSONP與Flickr的例子

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 爲了這個callbackFunction參數,你當然需要知道這個函數的名字來包裝你的JSON文件,因此,如果您轉換您jsonfile到PHP文件比你可以得到這樣的callbackfunctionname:

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

這個php文件將通過一個GET變量得到callback函數的名字,並用它包裝json的內容。這樣它工作正常。

回答

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

+0

對我仍然不清楚。如果您使用Firefox打開鏈接,jsonFlickrFeed的確在那裏,但是Chrome並沒有顯示。 無論我將它添加回調函數返回爲未定義的回調。 – Stofke

+0

好吧我看到與jquery調用我需要動態生成包裝的JSON與jQuery提供的回調函數 – Stofke