适用于ColdFusion开发人员的jQuery Ajax插件

时间:2012-03-18 05:05:03

标签: jquery jquery-plugins coldfusion

我写了一个插件来提供我所有流行的ColdFusion默认值,例如:

  • returnFormat = JSON
  • queryFormat =柱
  • 类型= 'POST'
  • 的dataType = 'JSON'
  • .fail()
  • .done()(但有一个抓住的错误)

它正在运作,但我不知道为什么我必须使用

myXHR = $.fn.myAjax()

而不是

myXHR = $.myAjax()

以下是代码:

!function($) {
    $.extend(
        $.fn, {
            myAjax: function(myURL, settings) {
                var local = {};
                $('#msg').empty().removeClass('alert alert-info');
                local.settings = $.extend({}, $.fn.ajaxDefaults, settings);
                local.myURL = myURL + '?returnFormat=json&queryFormat=column'
                local.result = $.ajax(local.myURL,local.settings)
                local.result.done(function(result) {
                    if (result.MSG) {
                        $('#msg').html(result.MSG).addClass('alert alert-info');
                    }
                });
                local.result.fail(function(A,B,C) {
                    $('#msg').html(C).addClass('alert alert-info');
                });
                return local.result;
            },
            ajaxDefaults:{
                type: 'POST',
                dataType: 'json',
                async:false
                // todo: context = this
            }
        }
    )

    $('input[type=checkbox]').bind('change', function(myEvent, ui) {
        var settings = {};
        settings.data = {};
        settings.data.PersonID = $(this).val();
        settings.context = this;

        if ($(this).is(':checked')) {
            settings.data.method = 'check';

            myXHR = $.fn.myAjax('Evnt.cfc',settings);
            myXHR.done(function(result) {
                if (!result.MSG) {
                    log(result.QRY.DATA);
                }
            });
        } else {
            settings.data.method = 'uncheck';
            myXHR = $.fn.myAjax('Evnt.cfc',settings);
            myXHR.done(function(result) {
                if (!result.MSG) {
                    log(result.QRY.DATA);
                }
            });
        }
    });


}(jQuery);

1 个答案:

答案 0 :(得分:3)

你基本上设置了这样的插件:

( function($) {
  $.fn.doSomething = function() {
    // stuff
  };
}(jQuery));

...因此有一个对jQuery对象进行操作的插件。所以这会奏效:

$('#something').doSomething();

但你这样称呼它:

$.doSomething(); // doesn't work

由于您显然希望您的函数在jQuery命名空间中独立存在,因此您可以将其设置为:

$.doSomething = function(){
  // stuff
};

因此,对于您的代码,请尝试在函数末尾正上方添加此代码:

$.myAjax = $.fn.myAjax;

作为旁注,为您的插件添加多个命名空间(从您的示例中ajaxDefaults)并不是一个好习惯。值得快速阅读jQuery Plugin Authoring page以获得一些好的提示。