我为woocommerce制作了一个AJAX过滤器,它根据属性过滤产品。
查询工作正常,它始终打印正确的产品和内容。它确实打印了一些东西。
每隔一段时间它就会运行但不添加任何HTML。如果我记录收到的数据,它显然在那里。有时html()
函数不会做任何事情。
如果在完成之前的操作之前双击过滤器按钮,似乎更常出现错误。我已经尝试添加一个数据属性来检查ajax是否已完成过滤,以阻止任何调用在第一次完成之前发生。它似乎并没有真正起作用。
AJAX功能:
function getPosts(page){
var filter = $('#filter');
if(filter.length < 1){
return false;
}
if(filter.data('loading') == true){
return false;
}
var buttonText = $('#filter #product-ajax-submit').text();
$.ajax({
url:filter.attr('action'),
data:filter.serialize() + '&page=' + page, // form data
type:filter.attr('method'), // POST
dataType: 'json',
beforeSend:function(xhr){
filter.attr('data-loading', true);
filter.find('#product-ajax-submit').text('Filtrerer...'); // changing the button label
$('#bbh-ajax-loader').fadeIn(200, function(){
var productsHeight = $('ul.products').outerHeight();
$('ul.products').parent().css('height', productsHeight);
$('ul.products').html(''); // delete current content
$('.woocommerce-pagination').html('');
});
},
success:function(data){
$('ul.products').empty().append(data[0]);
filter.find('#product-ajax-submit').text(buttonText); // changing the button label back
$('.woocommerce-pagination').html(data[1]);
$('ul.products').parent().css('height', 'auto');
$('#bbh-ajax-loader').fadeOut(300);
filter.find('select, button').prop( "disabled", false );
},
error:function(data){
$('ul.products').html(data.responseText);
$('ul.products').parent().css('height', 'auto');
$('#bbh-ajax-loader').fadeOut(300);
// insert data
filter.find('#product-ajax-submit').text(buttonText);
},
complete:function(data){
filter.attr('data-loading', false);
}
});
}
$('#filter[data-live-sort="false"]').on('submit', function(){
getPosts(1);
return false;
});
正如我所说,如果我记录返回的数据,标记总是正确的。成功与失误。我怀疑在ul.products
beforeSend
上清除html可能会导致显示成功数据的问题,如果同时进行多次调用。