2012-06-06 2 views
6

Я делаю простую галерею, которая берет фотографии с учетной записи picasa с html + javascript.javascript - Происхождение http://127.0.0.1 не разрешено Access-Control-Allow-Origin

Во-первых, получает список альбомов, а затем для каждого альбома получает список фотографий. Первый запрос работает нормально, но остальные возвращает эту ошибку в браузере (Chrome):

GET https://picasaweb.google.com/data/entry/base/user/114476218463019618611/albumid/5750459375839674337?alt=json&hl=en_US 404 (Not Found) jquery.js: 8240 XMLHttpRequest не может загрузить https://picasaweb.google.com/data/entry/base/user/114476218463019618611/albumid/5750459375839674337?alt=json&hl=en_US. Исходный файл: // не разрешен Access-Control-Allow-Origin.

Это код:

  var json_Album_URI = "https://picasaweb.google.com/data/feed/base/" 
       + "user/"  + username 
       + "?alt="  + "json" 
       + "&kind="  + "album" 
       + "&hl="  + "en_US" 
       + "&fields=" + "entry(media:group,id)" 
       + "&thumbsize=" + 104 
       + "&authkey=" + authkey; 

      $.ajax({ 
        type: 'GET', 
        url: json_Album_URI, 
        success : function(resp) { 
          albums = resp.feed.entry; 
        }, 
        dataType: 'json', 
        async: false 
      }); 
      for (var id in albums) { 
        var album = albums[id]; 
        var album_ID = album.id.$t.split('/')[9].split('?')[0]; 
        var json_Photo_URI = "https://picasaweb.google.com/data/feed/base/" 
          + "user/"  + username 
          + "/albumid/" + album_ID 
          + "?alt="  + "json" 
          + "&kind="  + "photo" 
          + "&hl="  + "en_US" 
          + "&fields=" + "entry(media:group)" 
          + "&thumbsize=" + 104 
          + "&authkey=" + authkey; 
        //this is the ajax call that fails 
        $.ajax({ 
          type: 'GET', 
          url: json_Photo_URI, 
          success: function(photos) { 
            console.log(photos); 
          }, 
          dataType: "json", 
          async: false, 
        }); 
      } 

Спасибо.

EDIT:

Я notica, что если я удалить строку:

      + "/albumid/" + album_ID 

работы (конечно, без ожидаемого ответа).

+4

попробовать JSONP вместо JSON для кросс домена Ajax вызова – Nemoy

+2

Вот версия JSONP, которая работает на jsFiddle: http://jsfiddle.net/ XsfNE /. Не уверен, что это означает, что он работает локально. (Я использовал случайный идентификатор, найденный в Интернете, потому что ваш URL был 404.) – pimvdb

ответ

1

Похоже, что виноват CORS. Ответы заголовка Picasa различаются между этими двумя запросами. Это удается, когда они включают access-control-allow-origin:*.

Picasa включает его в: https://picasaweb.google.com/data/entry/base/user/114476218463019618611?alt=json&hl=en_US

Но не в: https://picasaweb.google.com/data/entry/base/user/114476218463019618611/albumid/5750459375839674337?alt=json&hl=en_US

Смежные вопросы