Jquery plugins 从服务器加载jQuery插件默认值(AJAX)
我正在使用以下格式的私有jQuery插件:Jquery plugins 从服务器加载jQuery插件默认值(AJAX),jquery-plugins,jquery,Jquery Plugins,Jquery,我正在使用以下格式的私有jQuery插件: (function( $ ){ var defaults = {}; $.fn.cmFlex = function(opts) { this.each(function() { //Element specific options var o = $.extend({}, defaults, opts); //Code here
(function( $ ){
var defaults = {};
$.fn.cmFlex = function(opts) {
this.each(function() {
//Element specific options
var o = $.extend({}, defaults, opts);
//Code here
});
//code Here
};
})( jQuery );
在首次调用$.cmFlex()之前,我将如何继续从服务器加载默认选项
$.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,我建议您用谷歌搜索它。您有两个选择:
- Quick n'dirty和“secure”选项:对服务器进行同步调用。您可以设置一个ajax对象来锁定浏览器,直到它得到答案。jQuery的Ajax方法中有一个名为
的选项,默认设置为true。如果将其更改为false,JS执行流将挂起,直到您从服务器获得答案。这不是一个很好的解决方案,因为如果您的服务器停机,或者生成这些全局变量是一个很长的过程,那么用户就会等待它async
- 更干净但“不安全”选项:在第一次调用
时,检查cmFlex
默认值是否为
。如果是,则调用Ajax方法来填充它,并放置一个执行null
函数的回调函数。这里的问题是,如果在获得默认值之前再次调用它,您将对服务器进行重复调用cmFlex
- 清洁和安全选项:在对象中放置一个标志,类似于
,如果用户第二次调用isLoaded
,并且该标志设置为cmFlex
,则引发异常,或将此调用添加到队列中进行处理false
祝你好运 问题在于,在请求完成之前,函数将不可用,并且您没有任何声明性方法(除了循环请求
typeOf($.cmFlex)
)。