我正在编写我的第一个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文件本身。谢谢!
答案 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)
$.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。