2013-12-08 5 views
4

Используя отложенный объект в $ .ajaxJQuery отложенный метод и Ajax beforeSend()

  • успех обратного вызова может заменить на deferred-method done()
  • ошибка обратного вызова ACN заменен deferred-method fail()
  • и полный обратный вызов может быть заменен always()

с помощью

var jqxhr = $.ajax({ 
       url: Config.baseUrl+"/ajax/favourites/set-favourite.ajax", 
       dataType: "json", 
       data: attrs, 
       type: "POST", 
       beforeSend: function(){ 
        console.log("before send"); 
       } 
      }); 

Как я могу реализовать beforeSend-callback с использованием отложенного объекта?

Почему я не использую функцию beforeSend-callback внутри функции $.ajax? Поскольку запрос находится внутри экземпляра модели (http://canjs.com/docs/can.Model.model.html#section_Non_standardServices) , поэтому объект модели выполняет запрос, а все остальные - как, например, манипулируют DOM, будет выполняться в отложенном объекте. Я хотел бы манипулировать DOM перед отправкой запроса ajax.

как я могу это сделать?

+0

Я не думаю, что вы можете (если это не «прогресс», но я думаю, что он был бы уволен до того, как будет создано возвращенное обещание). Зачем вам нужен обратный вызов? – Bergi

+0

как я писал ... Я хотел бы манипулировать DOM перед отправкой запроса ajax. – JuKe

+0

Запрос уже сделан, когда вы добавляете отложенные методы к возвращенному обещанию, поэтому вы не можете добавить его после этого, который должен быть выполнен заранее. Может быть, вы можете привязать к умолчанию defaultSend (используя $ .ajaxSetup)? – towr

ответ

-1

Вы можете присоединить глобальное событие jQuery ajaxStart к любому элементу, запускающему ваш запрос AJAX. Это должно существенно повторить функциональность beforeSend.

$(".ajax").ajaxStart(function() { 
    $(".document").append("AJAX begun"); 
}); 

Fiddle.

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