Опция $.ajax context

Эпизод 11 подкаста yayQuery упоминает параметр $. ajax context. Как использовать эту опцию в обратном вызове успеха? То, что я сейчас делаю, передает мои входные параметры обратно в обратный вызов успеха, чтобы я мог анимировать идентификатор, который был вызван после успеха/ошибки. Если я использую параметр контекста, то, возможно, мне не нужно передавать параметры обратно из вызываемой процедуры.

В этом примере я передаю STATEID обратно в поле успеха, чтобы состояние удалялось из DOM после его удаления из базы данных:

$('td.delete').click(function() {
  var confirm = window.confirm('Are you sure?');
  if (confirm) {
    var StateID = $(this).parents('tr').attr('id');
    $.ajax({
      url: 'Remote/State.cfc',
      data: {
        method: 'Delete',
        'StateID': StateID
      },
      success: function(result) {
        if (result.MSG == '') {
          $('#' + result.STATEID).remove();
        } else {
          $('#msg').text(result.MSG).addClass('err');;
        };
      }
    });
  }
});

Ответы

Ответ 1

Все context делает, это устанавливает значение this в обратных вызовах.

Итак, если вы находитесь в обработчике событий и хотите, чтобы this в обратных вызовах был элементом, который получил событие, вы должны:

context:this,
success:function() {
    // "this" is whatever the value was where this ajax call was made
}

Если вы хотите, чтобы это был какой-то другой тип, просто установите это, и this будет ссылаться на это:

context:{some:'value'},
success:function() {
    // "this" the object you passed
    alert( this.some ); // "value"
}

В коде, добавленном к вопросу, вы можете использовать StateID, но вам не понадобится, поскольку у вас уже есть доступ к этой переменной.

var StateID = $(this).parents('tr').attr('id');
$.ajax({
    url: 'Remote/State.cfc'
    ,data: {
        method:'Delete'
        ,'StateID':StateID
    }
    ,context: StateID
    ,success: function(result){

        alert(this);     // the value of StateID
        alert(StateID);  // same as above

        if (result.MSG == '') {
            $('#' + result.STATEID).remove();
        } else {
            $('#msg').text(result.MSG).addClass('err');;
        };
    }
});

Ответ 2

Если вы установите параметр контекста, то this в успехе будет тем, что вы установили как значение для context. Поэтому, если вы передаете объектный литерал с именами и значениями входных параметров в качестве контекста, то при успехе вы можете использовать this.param1 для получения значения вашего первого входного параметра.

Подробнее см. . ajax().