2013-05-20 5 views
3

Отмечу, что этот код не является тем, что я построил, я просто делаю некоторые изменения пользовательского интерфейса с помощью плагина в системе, которая уже существует.

Я создаю плагин, который использует blockUI (да, мне нужно создать плагин с плагином), чтобы отображать значок загрузки по определенным элементам при запуске вызова Ajax, однако это, в частности, вызывает alert(), если событие success() не получает ответ, в котором он нуждается.

В результате этого мой загрузки значок вызова fadeOut()после в alert пожаров, которые не то, что я хочу, чтобы это сделать.

Когда я вызываю функцию я строй, я прохожу в $.post() комплекте с настройками и опциями, мне нужно, например: функция

$.fn.startLoading({    
    element: $("div"), 
    ajax: $.post('some.url', 
    { 
     //Ajax settings... 
    }, function (response) { //This is the success function, right? 
      if (good) { 
       //stuff 
      } 
      else 
       alert("Bad!"); //This happens BEFORE fadeOut() 
     } 
    }, 'text') 
    .error(function (msg) { 
     alert('Worse error!'); 
    }) 
}); 

моего плагина берет все это в качестве одного options параметра, как так:

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

Я тогда доступ к $.post() вызов вроде этого:

if (options.ajax) 
    ajax = options.ajax; 

Здесь я застрял. Мне нужно убедиться, что fadeOut() происходит до того, как будет запущено событие success. Как это сделать, используя переменную ajax, которую я создал в моем плагине?

+0

Ошибка синтаксиса здесь: 'ajax: $ .post ('some.url'), {' вероятно, следует удалить ')' –

+0

Просто увидел это, спасибо. Обновление сейчас. – Kehlan

+0

Кроме того, 'jqXHR.error' обесценивается, вместо этого вы должны использовать .fail. –

ответ

1

Один легкий путь с ajaxComplete, ajaxSuccess и т.д. http://api.jquery.com/category/ajax/

Те глобальные обработчики Аякса, которые захватывают все AJAX запросы, отправленные с помощью JQuery ... так что вы можете установить обработчик там и белый список собственных элементов обратного вызова и т.д., так что вы игнорируете те, которые вас не беспокоят.

В моем тестировании эти глобальные обработчики загораются перед обработчиками конкретного вызова ajax.

Смежные вопросы