我有一个小脚本,可以为网店菜单抓取一些JSON内容。有时一个类别中没有产品,所以当数组为空时,没有找到产品"线必须显示。 我用jQuery.isEmptyObject()尝试了这个,但现在文本只显示在WITH产品类别中。除了以上的东西之外,菜单本身也很完美......
所以我的问题是:如何检查json.products
或product
是否为空?如果是这样,您将如何合并它和脚本的结尾?
对你来说可能很容易......我再也看不到了;)
我有什么:
function widget(catId, catHref){
var url = catHref + 'page1.ajax?limit=4';
$.getJSON(url, function (json){
var productsHtml = [];
$.each(json.products, function(index, product){
var productHtml = '' +
..... blablabla .....
productsHtml.push(productHtml);
});
productsHtml = productsHtml.join('');
if (jQuery.isEmptyObject(json[productsHtml])) {
$('#widget-products'+catId+' ul').html('No products');
} else{
$('#widget-products'+catId+' ul').html(productsHtml);
}
});
}
答案 0 :(得分:1)
您正在使用以下行将数组转换为字符串:
productsHtml = productsHtml.join('');
所以,就这样做:
if ('' == productsHtml) {
// blah blah
根据对问题的评论和修改进行修改:
要检查json.products
是否为空,请检查json.products.length
:
if (!json.products.length) { // implies json.products is empty
您没有指定product
是什么,并且您从未在上面的代码中使用它。如果是数组,请检查product.length
。对于字符串,请与''
进行比较。如果它是一个对象,则使用jQuery.isEmptyObject(product)
。
根据评论编辑2:
要检查JSON对象是否具有给定属性,请使用.hasOwnProperty()
,如下所示:
if(!json.hasOwnProperty('collection') || !json.collection.hasOwnProperty('products')) {
如果没有collection
属性,则此短路,并且您知道没有collection.products
。如果它具有collection
属性,它将继续运行并检查collection.products
属性。
答案 1 :(得分:1)
只需检查数组的长度即可。
if(productsHtml.length>0)
{
//do your stuff here...
}
对于新问题,我已更新您的代码并添加了一些注释,以便您了解: -
$.getJSON(url, function(json) {
var productsHtml = [];
//here i am checking json or json.products is not undefined
if (json && json.products) {
$.each(json.products, function(index, product) {
//checking if product is not undefined
if (product) {
//do your stuff
var productHtml = '' +
.....blablabla.....
productsHtml.push(productHtml);
}
});
productsHtml = productsHtml.join('');
if (jQuery.isEmptyObject(json[productsHtml])) {
$('#widget-products' + catId + ' ul').html('No products');
} else {
$('#widget-products' + catId + ' ul').html(productsHtml);
}
}
});