0

我正在编写一个 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将检索到正确的数据,我预见到插件的多个实例存在问题。我该如何处理?

谢谢!

4

1 回答 1

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);
  });

}
于 2010-04-06T19:02:06.403 回答