Проблема при вызове метода объекта из ajax.success в jQuery - PullRequest
1 голос
/ 05 апреля 2009
function modifyDatabase(tabla, id, objData, callback, arrayCallback){
    $.ajax({
        url: 'modifyDatabase.php',
        type: "POST",
        dataType: "json",
        data: 'tabla='+tabla+'&id='+id+strData,
        success: function(data){            
            callback(data);
        },
    });
}

var obj = {
    set: function (data){
        alert(this.var1);
    },
    var1: 100
}

function modifyDatabase('', '', '', obj.set, '');

При выполнении этого я получаю сообщение об ошибке, сообщающее, что this.var1 не установлен или не определен. Если я вызываю метод откуда-то еще (не из асинхронного ответа), он работает нормально.

Похоже, что метод 'set' не находится внутри 'obj'.

Что происходит?

1 Ответ

2 голосов
/ 05 апреля 2009

Когда вы передаете ссылку на функцию таким образом, она на самом деле также не передает ссылку на объект. Быстрое решение заключается в создании анонимной функции, которая ссылается на реальный объект через замыкания. Вот хорошее описание того, почему это не сработало: http://bitstructures.com/2007/11/javascript-method-callbacks

Короче, нужно сделать:

function modifyDatabase('', '', '', function(){obj.set();}, '');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...