JSON Internet Explorer的问题

时间:2012-06-05 11:54:51

标签: jquery json internet-explorer parsing

我正在使用GalleryCMS为图像标题输出JSON提要等。使用它作为单独的脚本来解析JSON:

(function( $ ) {
  $.fn.gallerycms = function( options ) {

    var settings = $.extend({
      url : '',
      theme : '',
    }, options);

    var $this = $(this);

    return this.each(function() {

      if (settings.url.indexOf('/myfeed/') > -1) {
        alert('Only album feeds are supported by Galleria.')
      } else if (settings.url.indexOf('/feed/') > -1) {
        parseAlbum();
      }

    });

    function parseAlbum() {  
      $.getJSON(settings.url, 
                function(data) {
        $.each(data.images, function(key, image) {
          $($this).append('img src=<a href="' + image.url + '"><img data-title="' + image.caption + '" src="' + image.thumb + '" /></a>');
        });

        Galleria.loadTheme(settings.theme);
        Galleria.run($this);
      });
    }

  };
})( jQuery );

在html文档中,我使用它来设置脚本:

$(document).ready(function() {
      $('#galleria').gallerycms({
        url : 'http://www.paulgubaphoto.com/GalleryCMS/index.php/api/feed/json/e2b740b7-9ab1-11e1-ae3d-0022192d6244',
        theme : '/galleria/themes/twelve/galleria.twelve.min.js'
      });

因此与Chrome,Firefox,Safari,Mozilla完美搭配,但不喜欢上网浏览器。 您可以在这里找到它:www.paulgubaphoto.com/index-test.html。我是初学者,所以请慢慢清楚地输入。

1 个答案:

答案 0 :(得分:0)

在您的document.ready函数调用初始化gallerycms中,您正在使用Web服务URL http://paulgubaphoto.com/GalleryCMS/index.php/api/feed/json/3e346db5-93b0-11e1-ae3d-0022192d6244。但请求来自http://www.paulgubaphoto.com/index-test.html。 IE浏览器将“www.paulgubaphoto.com”和“paulgubaphoto.com”视为2个不同的网站。这意味着(至少在IE中)您的网络服务请求受same origin policy的约束(参见原产地确定规则),并且需要使用jsonp。如果您实际更改浏览器地址栏中URL的域以匹配Web查询URL的域部分,一切正常(至少在我的IE9版本上)。

为了避免使用jsonp,您应该尝试按如下方式定义gallerycms Web服务URL:

$(document).ready(function() {
      $('#galleria').gallerycms({
        url : 'http://' + document.domain + '/GalleryCMS/index.php/api/feed/json/3e346db5-93b0-11e1-ae3d-0022192d6244',
        theme : '/galleria/themes/twelve/galleria.twelve.min.js'
      });

这样你就不必担心这些问题了。