$ .ajax上下文选项

yayQuery podcast的第11集提到了$ .ajax上下文选项 。 我将如何在成功callback中使用此选项? 我目前正在做的是传递我的input参数回成功callback,以便我可以animation成功/错误后调用的ID。 如果我使用上下文选项,那么也许我不必从被调用的例程中传回参数。

在这个例子中,我将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');; }; } }); } }); 

所有的context都是在callback中设置这个值。

所以如果你在一个事件处理程序中,并且你希望thiscallback函数是接收事件的元素,你可以这样做:

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

如果你想要它是其他types,只需设置它, this将涉及到:

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

在你添加到问题的代码中,你可以使用StateID ,但是你并不需要,因为你已经可以访问这个variables。

 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的值。 所以如果你传递一个包含input参数名和值的对象字面量作为上下文,那么你可以使用this.param1来获得你的第一个input参数的值。

有关更多信息,请参阅.ajax()文档。