我在几个表中有一些<span>
个。
<table class="table-transactions">
<tr>
<td id="table1">
<span class="test"></span> blah blah blah
</td>
</tr>
</table>
<table class="table-transactions">
<tr>
<td id="table2">
<span class="test"></span> blah blah blah
</td>
</tr>
</table>
<table class="table-transactions">
<tr>
<td id="table3">
<span class="test"></span> blah blah blah
</td>
</tr>
</table>
<table class="table-transactions">
<tr>
<td id="table4">
<span class="test"></span> blah blah blah
</td>
</tr>
</table>
对于每个表,我检查它是否存在(可能不是使用php动态创建的),我使用单独的ajax调用来更新<span>
文本,因为它们调用不同的URL。
if($('#table1').length) {
$.ajax({
url: 'path/to/script/1',
type: 'post',
dataType: 'json',
data: {
'data': 'something',
},
success: function(response) {
$('#table1 .test').text(response);
}
});
}
if($('#table2').length) {
$.ajax({
url: 'path/to/script/2',
type: 'post',
dataType: 'json',
data: {
'data': 'something',
},
success: function(response) {
$('#table2 .test').text(response);
}
});
}
if($('#table3').length) {
$.ajax({
url: 'path/to/script/3',
type: 'post',
dataType: 'json',
data: {
'data': 'something',
},
success: function(response) {
$('#table3 .test').text(response);
}
});
}
if($('#table4').length) {
$.ajax({
url: 'path/to/script/4',
type: 'post',
dataType: 'json',
data: {
'data': 'something',
},
success: function(response) {
$('#table4 .test').text(response);
}
});
}
其中一些网址比其他网址更快地返回数据,当填充了所有<span>
时,我想运行一个函数。
我考虑过使用延迟对象,但我无法使用它。它运行良好,但我不确定如何:
这就是我想出来的
var promises = [];
var all = function(array) {
$('.table-transactions').each(function(elm) {
promises.push(function() {
return $.Deferred(function(dfd) {
dfd.resolve($(elm).find('.test').text());
}).promise();
});
});
};
$.when(all(promises)).then(function(results) {
console.log(results);
//alert('hello');
});
更新
Here is an example of my ajax calls
$.ajax({
url: 'path/to/script',
type: 'post',
dataType: 'json',
data: {
'data': 'something',
},
success: function(response) {
$('.test').text(response);
}
});
在成功函数中,我将针对特定的表跨度。这些只是简单的例子。
答案 0 :(得分:0)
您的功能不会返回任何内容。它应该返回promise数组
此外,$.when
并未设计为接受一系列承诺(不幸的是),但您可以使用$.when.apply()
或者在现代浏览器中,您可以使用Promise.all()
var all = function(array) {
var promises = [];
$('.table-transactions').each(function(elm) {
promises.push(function() {
return $.Deferred(function(dfd) {
dfd.resolve($(elm).find('.test').text());
}).promise();
});
});
// return the array
return promises
};
$.when.apply($, all()).then(function() {
console.log(arguments);
});
// OR
Promise.all( all()).then(function(results){
console.log(results);
})