Плагин jQuery Ajax для разработчиков ColdFusion - PullRequest
4 голосов
/ 18 марта 2012

Я написал плагин для предоставления всех моих популярных значений по умолчанию ColdFusion, таких как:

  • returnFormat = json
  • queryFormat = column
  • type = '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 Ответ

3 голосов
/ 19 марта 2012

Вы по сути настроили свой плагин так:

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

... и, следовательно, имеете плагин, который работает с объектами jQuery.Так что это будет работать:

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

Но вы вызываете это так:

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

Поскольку вы, очевидно, хотите, чтобы ваша функция стояла отдельно в пространстве имен jQuery, вы должны установитьэто выглядит так:

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

Итак, в случае вашего кода попробуйте добавить это внизу, прямо над концом вашей функции:

$.myAjax = $.fn.myAjax;

В качестве примечанияне рекомендуется добавлять более одного пространства имен для вашего плагина (ajaxDefaults из вашего примера).Стоит быстро прочитать страницу авторизации плагина jQuery , чтобы получить несколько полезных советов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...