$.контекстное меню Аякс


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

в этом примере я передаю 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   56   2011-02-24 00:13:08

2 ответа:

все 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');;
        };
    }
});

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

посмотреть .ajax () документы для получения дополнительной информации.