从服务器(AJAX)加载jQuery插件默认值

时间:2011-01-07 16:32:49

标签: jquery-plugins jquery

我正在使用以下格式的私有jQuery插件:

    (function( $ ){
      var defaults = {};

      $.fn.cmFlex = function(opts) {

        this.each(function() {
            //Element specific options
            var o = $.extend({}, defaults, opts);

            //Code here
        });

        //code Here
      };
    })( jQuery );

在首次调用$ .cmFlex()之前,我将如何继续从服务器加载默认选项?

2 个答案:

答案 0 :(得分:1)

$.getJSON("http://my.domain.com/prefsUrl?callback=?", function(defaults){
      $.fn.cmFlex = function(opts) {

        this.each(function() {
            //Element specific options
            var o = $.extend({}, defaults, opts);

            //Code here
        });

        //code Here
      };
});

假设prefsUrl返回有效的JSONP响应。如果你不熟悉JSONP,我建议你谷歌吧。

答案 1 :(得分:0)

您有两种选择:

  • 快速脏'和'安全'选项:对服务器进行同步调用。您可以设置一个ajax对象来锁定浏览器,直到它得到答案。 jQuery的Ajax方法中有一个名为async的选项,默认情况下设置为true。如果将此更改为false,则JS执行流将挂起,直到您从服务器获得答案。这不是一个非常好的解决方案,因为如果你的服务器关闭,或者那些全局变量的生成是一个漫长的过程,你将让用户等待它。
  • 清洁但“不安全”选项:在第一次调用cmFlex时,检查defaults是否为null。如果是,则调用Ajax方法填充它,并放置一个执行cmFlex函数的回调函数。这里的问题是,如果在获得默认值之前再次调用它,那么您将对服务器进行重复调用。
  • 清洁且安全的选项:在您的对象中添加一个标记,例如isLoaded,如果用户第二次调用cmFlex,则设置此标志到false,引发异常,或处理它将此调用添加到队列。
祝你好运!