我正在编写一个jQuery插件,用于呈现从页面元素中的另一个域检索的数据。我遵循我的jQuery插件的典型模式:
$(selector).Plugin(options);
在插件中,我使用jQuery.getScript(url, [success])获取外部数据。外部数据源允许我定义方法的名称,它将在调用该方法时包装数据(JSONP):
$.getScript("http://www.example.com/data?callback=global_callback", instance_callback);
这实际上导致:
<script type="text/javascript">
global_callback(data);
</script>
global_callback
的范围限制了插件实例可以对数据执行的操作。并且global_callback
方法不知道插件实例化的选择器或选项。
我认为global_callback
只会存储数据,而插件会检索instance_callback
中的数据。但我需要确保instance_callback
将检索正确的数据,我预见插件的多个实例会出现问题。我怎么处理这个?
谢谢!
答案 0 :(得分:1)
我可能不明白你在问什么。这些回调类似于常规JSON,除了您可以命名回调(如果需要)。在AJAX的上下文中执行,但当然除非您将其分配给不同的变量,否则这不可用。
如果您这样打电话,您甚至不需要为回调命名:
$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?", function(data){
$.each(data.items, function(i,item){
$("<img/>").attr("src", item.media.m).appendTo("#images")
.wrap("<a href='" + item.link + "'></a>");
if ( i == 3 ) return false;
});
});
参考:http://docs.jquery.com/Release:jQuery_1.2/Ajax#Cross-Domain_getJSON_.28using_JSONP.29
如果您担心在插件实例中运行,请将此调用包装在闭包中。这样,您可以引用回调期间需要访问的任何实例。
function GetSomeData(){
var that = this; //reference to the element you are working
$.getJSON("...",function(data){
//do some stuff to element with data
$("element").data("JSONP",data);
});
}