jQuery插件中的JSONP回调函数

时间:2014-05-14 23:59:09

标签: jquery ajax jquery-plugins jsonp getjson

我正在编写我的第一个jQuery插件,并寻找一些帮助在其中发出JSONP请求。

通常我会在回调函数中设置我的JSON数据,如此

saveDataCommunityPartners({
    "newsBlockItems": [
        {
            "title": "title title title",
            "img": "item-img.jpg"
        },
        {
            "title": "title title title",
            "img": "item-img.jpg"
        }
        ... and so on and so forth
    ]
})

然后在一个页面上,我这样称呼.getJSON()

$.getJSON("http://i.cdn.turner.com/nba/nba/.element/media/2.0/teamsites/warriors/json/json-redesign-communitypartners.js?callback=?");

并设置回调函数

function saveDataCommunityPartners(data) {
    alert("got data");
}

一切正常。我如何才能在插件中使用它?如果我这样做,就像它在下面那样,我得到了一个" Uncaught ReferenceError:saveDataCommunityPartners没有定义"错误。

(function($) {
    $.fn.createNewsBlock = function( options ) {
        // Establish defaults
        var settings = $.extend({
        thisData        : {},
        pageFilter      : "community"
    }, options);

    $.getJSON("http://i.cdn.turner.com/nba/nba/.element/media/2.0/teamsites/warriors/json/json-redesign-communitypartners.js?callback=?");

    function saveDataCommunityPartners(data) {
        alert("got data");
    }
}(jQuery));

无论推荐什么,我都可以更改插件,或者如何设置JSON文件本身。谢谢!

2 个答案:

答案 0 :(得分:1)

getJSON方法有一个可以使用的回调功能。

$.getJSON("http://i.cdn.turner.com/nba/nba/.element/media/2.0/teamsites/warriors/json/json-redesign-communitypartners.js?callback=?",function(data){

saveDataCommunityPartners(data);

});

或使用链式命令

$.getJSON("http://i.cdn.turner.com/nba/nba/.element/media/2.0/teamsites/warriors/json/json-redesign-communitypartners.js?callback=?").done(function( data ) {

saveDataCommunityPartners(data);

})

如果错误仍然存​​在,您还可以在jQuery容器外重定位saveDataCommunityPartners函数。

答案 1 :(得分:0)

使用this code from here

开始工作
$.ajax({
    type: 'GET',
    url: "http://i.cdn.turner.com/nba/nba/.element/media/2.0/teamsites/warriors/json/json-redesign-communitypartners.js?callback=?",
    async: false,
    jsonpCallback: 'saveDataCommunityPartners',
    contentType: "application/json",
    dataType: 'jsonp',
    success: function(json) {
        parseJSON(json); // pass to function to use for whatever
    },
    error: function(e) {
        console.log(e.message);
    }
});

请注意,最初在success函数中我试图将json存储在一个名为data的变量中,如:data = json;,但遇到了问题,因为这不能确保json将在时间{{可以访问1}}。有关该目的的更多信息,请参阅this question