добавить обратный вызов функции успеха ajax в функцию jquery

#jquery

#jquery

Вопрос:

 (function ($) {
        $.fn.sendAuditToHandler = function (options) {

            var defaultSettings = {
                'url': '../SentinelOperationsUI/GenericHandler.ashx'
            };

            var objectToSend = {};

            var opts = $.extend(defaultSettings, options);

            $(this).find('input[type=text], select').each(function (i, val) {

                var objectKey = $(val).attr('class');
                var objectValue = $(val).val();

                objectToSend[objectKey] = objectValue;
            });

            objectToSend = JSON.stringify(objectToSend);

            $.ajax({
                url: opts.url,
                data: { 'AuditObject': objectToSend },
                success: function (data) {

                }
            });

            return this;

        };
    })(jQuery);
  

То, что я хотел бы использовать, это что-то вроде использования функции успеха ajax в моем вызове функции. Что-то вроде

 sendAuditToHandler({ /* some options */ }, success: function() { //ajax success callback function }...
  

Ответ №1:

Либо передайте его как обычный параметр, либо как часть существующего хэша опций.

 $.fn.sendAuditToHandler = function (options, onSuccess) {
    // etc.
        $.ajax({
            url: opts.url,
            data: { 'AuditObject': objectToSend },
            success: onSuccess
        });
  

Затем, когда вы вызываете ее:

 sendAuditToHandler({ /* some options */ }, function(data) {
    // Whatever you want.
    alert("ohai");
});
  

Или как часть опций:

 $.ajax({
    url: opts.url,
    data: { 'AuditObject': objectToSend },
    success: opts.onSuccess
});
  

И когда вы вызываете ее:

 sendAuditToHandler({
    url: "the url",
    // other options, then the method.
    onSuccess: function(data) {
        // Whatever you want.
        alert("ohai");
    }
});
  

Комментарии:

1. спасибо, но почему я не могу передать onsuccess только в аргументах? нужно ли мне передавать параметры, даже если у них есть настройки по умолчанию?

2. @Johan Я не понимаю, о чем ты спрашиваешь. Вы можете передать все, что хотите, в опциях, включая функцию успеха.

3. я спрашиваю, нормально ли передавать только функцию успеха и пропускать параметры 🙂

4. неважно, я просто забыл добавить { , спасибо за ваш подробный ответ 🙂

5. @Johan Ах, я понимаю 🙂 Да, как вы обнаружили, вы можете 🙂

Ответ №2:

Вы можете вызвать свою функцию успеха внутри вызова ajax

 $.ajax({ 
   url: opts.url, 
   data: { 'AuditObject': objectToSend }, 
   success: function (data) { 
        options.success();
   } 
});