Можем ли мы переместить функцию успеха за пределы .ajax?

#jquery

#jquery

Вопрос:

В примере jquery я видел, что обычно для определения функции успеха внутри $.ajax() мы можем переместить ее за пределы тела.

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

1. Вы должны объяснить, зачем вам это нужно?

2. @Shakti Singh: нет, он не обязан. Это довольно тривиально — например, когда нам нужно иметь один и тот же обработчик для нескольких $.ajax , или когда функция уже где-то определена.

Ответ №1:

Если вы имеете в виду что-то вроде этого:

 function onSuccess()
{
    $(this).addClass("done");
}

$.ajax({
  url: "test.html",
  context: document.body,
  success: onSuccess 
});
  

тогда да, вы можете это сделать.

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

1. почти 1-ред. пожалуйста, передайте msg , msg.d что угодно. иначе какой смысл?

Ответ №2:

Да, конечно. Вы можете назначить анонимную функцию переменной:

 var handleSuccess = function(data) {
  alert(data);
};
  

или вы можете сделать это именованной функцией:

 function handleSuccess(data) {
  alert(data);
}
  

Для обеих альтернатив вы просто используете имя переменной / функции в объекте:

 $.ajax({
  success: handleSuccess
  ...
});
  

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

1. почему указание данных таким образом является ошибкой success: handleSuccess(данные)

2. @user705414: Поскольку затем вы вызовете функцию и поместите возвращаемое значение в объект, вы хотите поместить ссылку на функцию в объект.

Ответ №3:

Я использую dojo чаще, чем jquery, но идея та же. Пока вызов ajax может ссылаться на эту внешнюю функцию, нет причин, по которым вы не можете этого сделать. Вы можете столкнуться с проблемой, заключающейся в том, что при вызове этой ajax-функции она больше не сможет получить доступ к функции успеха, в зависимости от того, как вы все настроили. dojo.hitch (контекст, функция) исправит это за вас.