контекстная опция $ .ajax - PullRequest
       20

контекстная опция $ .ajax

61 голосов
/ 24 февраля 2011

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

В этом примере я передаю 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');;
        };
      }
    });
  }
});

Ответы [ 2 ]

119 голосов
/ 24 февраля 2011

Все, что делает 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');;
        };
    }
});
11 голосов
/ 24 февраля 2011

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

См. .ajax() документы для более.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...