web-dev-qa-db-fra.com

Option de contexte $ .ajax

L'épisode 11 du podcast yayQuery mentionne le option de contexte $. Ajax . Comment utiliser cette option dans le rappel de réussite? Ce que je fais actuellement, c'est de transmettre mes paramètres d'entrée au rappel de succès afin de pouvoir animer l'ID qui a été appelé après le succès/l'erreur. Si j'utilise l'option contextuelle, je n'ai peut-être pas à retransmettre les paramètres de la routine appelée.

Dans cet exemple, je transmets STATEID au champ de réussite afin que l'état soit supprimé du DOM une fois qu'il a été supprimé de la base de données:

$('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');;
        };
      }
    });
  }
});
61
Phillip Senn

Tout ce que context fait, c'est qu'il définit la valeur de this dans les rappels.

Donc, si vous êtes dans un gestionnaire d'événements et que vous voulez que this dans les rappels soit l'élément qui a reçu l'événement, vous feriez:

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

Si vous vouliez que ce soit un autre type, définissez-le simplement et this y fera référence:

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

Dans le code que vous avez ajouté à la question, vous pouvez utiliser StateID, mais vous n'en aurez pas vraiment besoin car vous avez déjà accès à cette variable.

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');;
        };
    }
});
120
user113716

Si vous définissez l'option de contexte, this en cas de succès sera ce que vous définissez comme valeur pour context. Donc, si vous passez un littéral d'objet contenant vos noms et valeurs de paramètres d'entrée comme contexte, vous pouvez utiliser avec succès this.param1 pour obtenir la valeur de votre premier paramètre d'entrée.

Consultez la documentation . Ajax () pour en savoir plus.

11
justkt