jQuery .done函数没有在IE中触发

时间:2013-12-04 20:48:31

标签: javascript jquery internet-explorer

在下面的JS中,.done函数在FF,Chrome和Opera中启动,但是在IE 10及更低版本中它不会消失。它的想法是从URL中获取唯一标识符将允许代码决定从Flickr帐户中抓取哪些photoset并显示在滑块中以便稍后在iFrame中使用。然而,当谈到IE10和更低时,.done似乎完全被跳过了。任何低于.getJSON调用的内容都会被忽略。

$(window).load(function() {
    var pathname = window.location.pathname;
    var photoSetId = ['72157638321110124','72157638320688146','72157638320892573','72157638320142195', '72157638319052975'];
    var setNum = window.location.href.split('?')[1];
    var user = '110468775@N05';
    var apiKey = 'fa3bd9c48f711aef070622ba60014b21';
    var photoset = photoSetId[setNum];
    var flickr = 'http://api.flickr.com/services/rest/';
    $.getJSON( flickr, {
        method: "flickr.photosets.getPhotos",
        nojsoncallback: 1,
        extras: "original_format",
        api_key: apiKey,
        photoset_id: photoset,
        privacy_filter: '1',
        format: 'json'
    })
    .done(function(data) {
        console.log(data);
        $.each( data.photoset.photo, function(i, item ) {
            var url = 'http://farm' + item.farm + '.staticflickr.com/' + item.server + '/' + item.id + '_' + item.originalsecret + '_o.jpg';
            var $li = $("<li>");
            var $img = $("<img>").attr('src', url);
            $img.appendTo($li);
            $li.appendTo('.bjqs');
        });

        $('#slider').bjqs({
            'height': 360,
            'width': 640,
            'showcontrols': true,
            'centercontrols': true,
            'showmarkers': false
        });
    });
});

1 个答案:

答案 0 :(得分:1)

它在IE以外的所有浏览器中都有效,因为IE以外的所有浏览器都支持使用XmlHTTPRequest对象的CORS,而IE需要在IE11之前使用XDomainRequest对象。

要解决此问题,请通过删除nojsoncallback参数来交换使用jsonp,然后将jsoncallback参数添加到flickr url中,以便jquery知道将flickr api的回调名称放在何处。

var flickr = 'http://api.flickr.com/services/rest/?jsoncallback=?';
$.getJSON( flickr, {
    method: "flickr.photosets.getPhotos",
    //nojsoncallback: 1,
    extras: "original_format",
    api_key: apiKey,
    photoset_id: photoset,
    privacy_filter: '1',
    format: 'json'
})