我有一个JS脚本做多个AJAX请求。首先,我按ID请求一个产品,然后我请求此产品的每一个变体。我不能做任何形式的后端编码,因为我工作的环境是封闭的。
我的请求运行良好,但现在我将每个变量都附加到一个div中,而我的客户并不真正喜欢这样,所以我在想,是否可以将所有数据加载到一个变量中,然后在最后淡入所有变量的父div?
我的脚本如下所示:
var variants = $('.single_product-variant-images');
$.ajax({
url: productMasterURL,
success: function (data) {
$(data).find('Combinations Combination').each(function () {
var variantID = $(this).attr('ProductNumber');
$.ajax({
url: "/api.asp?id=" + escape(variantID),
dataType: "json",
async: true,
cache: true,
success: function (data) {
variants.append('<div class="variant"><a href="' + data.url + '" title="Vis variant"><img src="' + data.pictureLink + '" alt=""/></a></div>');
variants.find('.variant').fadeIn(300);
}
});
});
}
});发布于 2017-05-11 20:42:53
一些快速和肮脏的解决方案,但解决方案的思想和概念是清晰的。这是一个糟糕的解决方案,但适用于您无法访问后端代码的情况。
var all_load_interval;
var is_all_data_ready = false;
var all_data_count = 0;
var variants = $('.single_product-variant-images');
$.ajax({
url: productMasterURL,
success: function (data) {
var data_count = $(data).find('Combinations Combination').length;
$(data).find('Combinations Combination').each(function () {
var variantID = $(this).attr('ProductNumber');
$.ajax({
url: "/api.asp?id=" + escape(variantID),
dataType: "json",
async: true,
cache: true,
success: function (data) {
// make div with class variant hidden
variants.append('<div class="variant"><a href="' + data.url + '" title="Vis variant"><img src="' + data.pictureLink + '" alt=""/></a></div>');
// count every variant
all_data_count += 1
if (all_data_count == data_count) {
// when all data got and created, lets trigger our interval - all_load_interval
is_all_data_ready = true;
}
}
});
});
}
all_load_interval = setInterval(function() {
// Check does all data load every second
if (is_all_data_ready) {
// show all div.variant
variants.find('.variant').fadeIn(300);
clearInterval(all_load_interval);
}
}, 1000);
});https://stackoverflow.com/questions/43914880
复制相似问题