Выполнить метод виджета jQuery внутри ajax-запроса / setTimeout
Я пытаюсь вызвать другой метод внутри setTimeout
функция, но он не находит метод, если я использую this.install()
внутри setTimeout
, Я пробовал некоторые решения, но, кажется, не решить, поэтому я спрашиваю здесь.
Код, который у меня есть, не забудьте посмотреть в комментариях, что я пытаюсь сделать:
jQuery(window).load(function () {
$.widget( "testing.updater", {
options: {
},
_create: function() {
//
this.element.addClass('text');
//
this.downloadFiles('bootstrap');
},
downloadFiles: function(packagen) {
var ajax = $.ajax({
type: "POST",
url: "responses/test.php",
data: "download=" + packagen,
success: function(data) {
var obj = jQuery.parseJSON( data);
$('.text').append('Downloading files...<br>');
$('#updateBtn').attr("disabled", true);
if (obj.downloaded) {
setTimeout(function(message){
$('.text').append(obj.message+'<p><p>');
// Down here I want to call another method
// like this.install(); <.. but ain't working..
}, 5000);
} else {
return $('.text').append('<p><p> <font color="red">'+obj.message+'</font>');
}
}
});
},
install: function() {
// I want to run this method inside
// prev method, look above comment
},
});
$('#updateBtn').on('click',function(){
var test = $('.updater').updater();
test.updater();
});
});
1 ответ
Решение
Внутри setTimeout
Перезвоните, this
относится к глобальному - window
объект. Вы можете сохранить ссылку на объект до истечения времени ожидания, как var that = this
и использовать его для ссылки на объект внутри тайм-аута,
или вы можете передать контекст, используя bind()
метод как:
setTimeout(function () {
console.log(this)
}.bind(obj), 10);