Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.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/72.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_Json - Fatal编程技术网

Javascript 多维JSON结构问题

Javascript 多维JSON结构问题,javascript,jquery,json,Javascript,Jquery,Json,我有以下伪结构 [ {"product": { "id":"14", "product_title":"My Awesome Product!", "product_desc":"An awesome product.." } }, {"product": { "id":"15", "product_title":"My MORE Awesome Product

我有以下伪结构

[
   {"product":
      {
        "id":"14",
        "product_title":"My Awesome Product!",
        "product_desc":"An awesome product.."
      }
   }, 
   {"product":
      {
        "id":"15",
        "product_title":"My MORE Awesome Product!",
        "product_desc":"An AWESOMER product..."
      }
   }
]
我是这样迭代的:

$.post('Ajax.php',function(res){
  res = res.pop();
  $.each(res,function(product){
    alert(product.product_title);
  });
});
但是,仅显示最后一个
产品标题
。并不是所有的都能通过。 是我的代码,还是我的JSON结构?谢谢

编辑:
.pop()的原因

您的res=res.pop();行正在将res设置为res数组的最后一个元素。如果删除该行,它应该可以正常工作。

$.post('Ajax.php',function(res){
$.post('Ajax.php', function(res) {
  for (var i = 0, j = res.length; i < j; i++) {
    console.log(res[i].product.product_title);
  }
});
对于(变量i=0,j=res.length;i

试试这个,它应该显示2个产品名称。JSON结构很好。

我的建议是使用简单的JavaScript迭代(
for
循环):

var-temp=
[
{“产品”:
{
“id”:“14”,
“产品名称”:“我最棒的产品!”,
“产品描述”:“一款很棒的产品”
}
}, 
{“产品”:
{
“id”:“15”,
“产品名称”:“我更棒的产品!”,
“产品描述”:“令人敬畏的产品…”
}
}
]
对于(变量i=0;i
如果要迭代,请不要弹出

$.post('Ajax.php',function(res){

  $.each(res,function( index, value ){
   alert( value.product.product_title );
  });
});
此外,JSON结构有一些冗余,可以写成:

[
      {
        "id":"14",
        "product_title":"My Awesome Product!",
        "product_desc":"An awesome product.."
      },


      {
        "id":"15",
        "product_title":"My MORE Awesome Product!",
        "product_desc":"An AWESOMER product..."
      }
]
这意味着一系列的产品。您总是希望数组包含单一类型的内容。如果您想从服务器返回多个内容,这将是更合适的结构:

{  
    "products": [
      {
        "id":"14",
        "product_title":"My Awesome Product!",
        "product_desc":"An awesome product.."
      },


      {
        "id":"15",
        "product_title":"My MORE Awesome Product!",
        "product_desc":"An AWESOMER product..."
      }
    ],

    "kittens": [
      {
        "id":"14",
        "name":"kitty"
      },


      {
        "id":"15",
        "name": "kitty"
      }
    ]
}

一系列产品和一系列小猫,而不是一系列产品和小猫。

为什么
.pop()
?它不返回数组,而是返回数组最后一个索引中的任何内容,并将其从array@Esailija-请参阅-我的上一个问题:)这会遍历所有产品吗?在另一个问题中建议这样做的原因是因为数组只有一个元素。$.each将迭代数组中的每个元素,因此数组中有多少元素无关紧要。你不需要.pop()对不起,这里的网速太慢了。我拔下弹珠,试着用@Esailija的答案——这很有效。:)谢谢,这成功了!但是,
不应该是
每个
中的当前
产品
?您的json结构是一个对象数组,每个对象都有一个元素
产品
。因此
(设置为res数组的每个元素)实际上是一个类似于:
{“product”:{“id”:15,“product_title”:“…”}
的对象,这就是为什么在获得
产品标题
之前,需要执行
值.product
,以获取对象中的
产品
元素
{  
    "products": [
      {
        "id":"14",
        "product_title":"My Awesome Product!",
        "product_desc":"An awesome product.."
      },


      {
        "id":"15",
        "product_title":"My MORE Awesome Product!",
        "product_desc":"An AWESOMER product..."
      }
    ],

    "kittens": [
      {
        "id":"14",
        "name":"kitty"
      },


      {
        "id":"15",
        "name": "kitty"
      }
    ]
}