"Проблема в том, что я не могу использовать это, когда этот метод вызывается ajax."
Используйте свойство context:
$.ajax
вызов.
$.ajax({
url:...,
context: myClass,
success: myClass.myMethod
});
или использование $.proxy
...
$.ajax({
url:...,
success: $.proxy(myClass, 'myMethod')
});
Учитывая обновленный код, вам нужноизмените func(data)
на вызов из контекста вызова, который вы установили с помощью context:
, так что вы делаете this.func(data)
...
var myAjax = function(context_,func)
{
$.ajax({
url:"www.google.com",
type: "GET",
context:context_,
complete:function(data){
this.func(data);
}
});
};
... но так как вы ничего не делаете в этоманонимная функция, кроме вызова переданной вами функции и передачи аргумента, вы можете просто сделать complete:func
...
var myAjax = function(context_,func)
{
$.ajax({
url:"www.google.com",
type: "GET",
context:context_,
complete:func
});
};
... и контекст вызова func
будет установлен вобъект, который вы передали, и аргумент data
все равно будет передан функции.
Конечно, это не проблема, как работает ваш код, потому что у вас уже есть закрытыйссылка на ваш контекст, так что вы можете просто пропустить прохождение func
и просто получить его прямо из вашего объекта ...
var myAjax = function(context_) // <-- no function argument needed
{
$.ajax({
url:"www.google.com",
type: "GET",
complete:function(data){
context_.print(data);
}
});
};
var refreshGroups = function(groups)
{
var myClass = new MyClass();
myAjax(myClass); // <--just pass the object
return;
}