Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 检查json数据长度是否为';行不通_Javascript_Jquery_Arrays_Json - Fatal编程技术网

Javascript 检查json数据长度是否为';行不通

Javascript 检查json数据长度是否为';行不通,javascript,jquery,arrays,json,Javascript,Jquery,Arrays,Json,我正在尝试用Bootstrap4下拉菜单构建一个产品比较模块。 在该下拉列表中,列出了一些产品信息。当您在产品上单击“删除”时,将加载名为updateCompare的函数。此函数用于加载json数据并更新比较列表。这一切都很好,除非只有一个产品上市。当我在最后一项上单击delete时,函数将抛出错误 所以我得到的是: function updateCompare(){ $.get(compareUrl + '?format=json', function(e) { pro

我正在尝试用Bootstrap4下拉菜单构建一个产品比较模块。 在该下拉列表中,列出了一些产品信息。当您在产品上单击“删除”时,将加载名为
updateCompare
的函数。此函数用于加载json数据并更新比较列表。这一切都很好,除非只有一个产品上市。当我在最后一项上单击delete时,函数将抛出错误

所以我得到的是:

function updateCompare(){
    $.get(compareUrl + '?format=json', function(e) {
        products = [];
        $.each(e.compare.products, function(index, product) {
         // ... code to build products ....
          products.push(productHtml);
        });
        products.join('');
        $('#compare .compare-inner .empty').html(products);
  })
}

$(function(){
// delete product from compare
  $(document).on("click", "#compare .remove", function(e) {
    e.preventDefault();
    var vid = $(this).closest('.item').data('vid');
    var url = compareUrl + 'delete/' + vid;
     $.ajax({ 
      type: "POST", 
      url: url, 
      success: function(msg){ 
        updateCompare()
      }
    }); 
  });
});
我得到的错误是
TypeError:a未定义

我在
updateCompare
中尝试的是:

function updateCompare(){
    $.get(compareUrl + '?format=json', function(e) {
        products = [];
        if(e.compare.products.length > 1 ){
         $.each(e.compare.products, function(index, product) {
         // .... code to build products
         });
        } else {
         $('#compare').dropdown("dispose")
        }
但上面抛出了一个错误,如:
TypeError:e.compare.products未定义

我也试过:

if(e.compare.products.length > 1 || e.compare.products != NULL || e.compare.products != false ){
但这会引发一个错误,即compare.products未定义

我在这方面工作太久了,所以可能我错过了一些非常简单的东西。我再也看不见了:(

非常感谢您的帮助

根据要求

空比较json:

{
   "compare":false
}
JSON与3种产品:

{
   "compare":{
      "products":[
         {
            "id":39687158,
         },
         {
            "id":39687161,
         },
         {
            "id":39687164,
         }
      ]
   },

}

你能给我们看一下json数据吗?你在哪里使用了未定义的变量a?@schildi:我已经用json更新了这个问题。根据你的想法,我也尝试了
e.compare.products!=false
。但这也给出了
TypeError:a未定义
。我不知道你使用
变量a的确切意思是什么是未定义的
?!?@Meules schldi的意思-在你的问题中,你写道“我得到的错误是TypeError:a未定义”…但是在您的代码示例中没有名为
a
的变量。显然,为了解决此错误,您需要找到该变量,然后找出为什么没有给它一个值。@Meules无论如何,基于您的JSON,而不是
if(e.compare.products.length>1){
如果(e.compare!=false),您最好使用
if(e.compare!=false){
。显然,在您提到的“空JSON”案例中,没有称为“产品”的属性是“比较”的子属性.它不存在…这就是为什么当你试图在代码中使用它时,你会被告知
e.compare.products是未定义的
。未定义意味着变量不存在或没有值。从逻辑上讲,你不能要求它的长度,因为你要求的是零的长度。因此…当你认为真的。@schildi,@ADyson:Man!!就像我说的,我在这方面花了太长时间。
如果(e.compare!=false){
去掉错误。剩下的唯一一件事就是销毁下拉列表。谢谢!!