【发布时间】:2018-11-14 17:43:22
【问题描述】:
我创建了一个我试图实例化的类,以查看它是否以我想要的方式处理,并且它工作正常。
实际上,没有我想的那么好,check[i].id() 只会在我在each 循环处暂停控制台时出现在控制台中。
否则,什么都不会炫耀,check 将是undefined。我真的不明白问题出在哪里,这是我第一次遇到这个时间问题。我想知道问题是否来自我的 AJAX 请求太慢,但它不应该在填充 check var 之前等待计算吗?
这是代码,为了清楚起见,我稍微修改了一下:
var Form = function(formSelector, buttonsSelector) {
var id;
return {
// Index of specific form
setId: function(val) {
(!isNaN(val)) ? id = val: console.log('Id must be integer')
},
id: function() {
return id
},
// Get selectors
formSelector: function() {
return formSelector
},
buttonsSelector: function() {
return buttonsSelector
},
// Get all DOM elements
getAll: function() {
return $(formSelector)
},
// Get id related elements
get: function() {
return $(this.getAll()).get(id)
},
buttons: function() {
var buttons = $(this.get()).find(buttonsSelector);
var elements = [];
var proceed = $.ajax({
url: 'myURL.php',
dataType: 'json'
}).done(function(data) {
$(buttons).each(function(i) {
if ((data.id()).includes($(buttons[i]).attr('id'))) {
var element = new Buttons($(buttons[i]), data[i].id);
elements.push(element);
}
});
return true;
});
if (proceed) return elements;
}
}
}
$(function() {
var test = new Form('.whatever', '.whatever2');
var check = test.buttons();
$(check).each(function(i) {
console.log(check[i].id());
});
});
谢谢!
【问题讨论】:
-
在代码修改后编辑了一些错误
-
在 ajax 完成之前返回元素。尝试接受回调并在 ajax 完成时使用元素调用它(即在
done内) -
甚至返回一个承诺(来自
buttons方法)并使用async/await以便之后处理它们 -
@NikosM。谢谢您的回答。不过,我怎么知道
done内的 ajax 何时完成?我尝试将complete: function () { return elements }添加到我的 AJAX 请求中,但它仍然无法正常工作 -
您需要在
buttons方法中接受一个回调函数,然后在done或complete上调用此回调并将元素也传递给它。不只是返回不起作用的元素,没有人可以接受它们
标签: javascript jquery timing