将上下文传递给jQuery中的ajax/success函数

将上下文传递给jQuery中的ajax/success函数

问题描述:

我在表单元素上调用此函数,并根据json对象包含的内容更改表单元素的背景。本质上是一个简化的验证 - 但我不想使用jQuery的臃肿的验证插件。将上下文传递给jQuery中的ajax/success函数

IV.validSimple 
(
    { 
     obj: '#email', 
     event: 'blur', 
     check: 'emailexists' 
    } 
); 

的问题是(封闭上下文/范围使我狂:),我怎样才能在下面的代码的d变量(对象)传递给成功回调(_IV.bool)。

var IV = 
{ 
    urlBase: '/oink/ajax/', 

    validSimple: function(d) 
    { 
     var _IV = this; 

     $(d.obj).bind(d.event, function() 
     { 
      $.ajax 
      ({ 
       url: _IV.urlBase + d.check + '?' + $(d.obj).val(), 
       async: true, 
       dataType: 'json', 
       success: _IV.bool, 
      }); 
     } 
     ); 
    }, 

    bool: function(data) 
    { 
     if (data.ok == 1) 
      $(obj).css('backgroundColor','#c5e8c5'); 
     else 
     { 
      $(obj).css('backgroundColor','#f7c7c7').focus(); 
     } 
    } //function 
}; 

,你可以设置context选项:

$.ajax({ 
    url: _IV.urlBase + d.check + '?' + $(d.obj).val(), 
    dataType: 'json', 
    context: d.obj, // or context: d , don't know which one you want 
    success: _IV.bool, 
}); 

并在bool内部使用$(this)而不是$(obj)

使用任何方式似乎更符合你的逻辑。

只是做

... 
success: function(data) { 
    _IV.bool(data, d) 
} 
... 

在查询初始化代码,并重新定义bool这样:或者

... 
bool: function(data, d) { 
... 
+0

啊该死了,今天早上这么早了:DD。谢谢。 – Jauzsika