Передача контекста в функцию ajax / success в jQuery - PullRequest
3 голосов
/ 16 августа 2011

Я вызываю эту функцию для элемента формы, и в зависимости от того, что содержит объект json, меняю фон элемента формы. По сути, это упрощенная проверка - но я не хочу использовать раздутые плагины проверки jQuery.

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
};

Ответы [ 2 ]

4 голосов
/ 16 августа 2011

Кроме того, вы можете установить параметр 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,
});

и использовать $(this) внутри bool вместо $(obj).

Используйте любой способ, который вам кажется более логичным.

3 голосов
/ 16 августа 2011

просто сделай

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

в коде инициализации запроса и переопределите bool следующим образом:

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