如何在ajax中获得所有json值?

时间:2011-10-09 01:23:23

标签: jquery ajax arrays json

我有一个例子json结果:

{"Products": [{"ProductIndex": "1", "ProductCode": "116001", "ProductPrice": "$517.00"},{"ProductIndex": "2", "ProductCode": "37732", "ProductPrice": "$288.00"}],"Totals": [{"CartTotal": "$805.00", "Quantity": "2", "DiscountTotal": "0", "LastProduct": "0"}]}

我有这个jQuery:

     jQuery(function(){
        jQuery.ajax({
           url: '/AjaxCart.asp',
           cache: false,
           dataType: 'text',
           success: function(data) {
              var json = eval('(' + data + ')');
              var quantity;
              var cartTotal;
              var screenId;
              quantity = json.Totals[0].Quantity;
              cartTotal = json.Totals[0].CartTotal;
              screenId = json.Products[0].ProductCode;
              $("#content_area").prepend(screenId);
              },
           error: function() {
              return false;
           }
        });
     });

它可以工作,但是screenid只是拉取ProductCode的第一个值。我需要它遍历整个结果并显示两个ProductCode值。我已经尝试将.each函数放在不同的东西上但没有结果。有什么帮助吗?

我认为我很接近这一点,但它仍然无效:

pIndex = json.Products[0];
for(var i = pIndex.length; i--;) {
screenItem = pIndex[i];
$("#content_area.").prepend(screenItem.ProductCode)

2 个答案:

答案 0 :(得分:2)

我认为您需要将pIndex = json.Products[0];更改为pIndex = json.Products;,此时您尝试循环遍历单个对象,即Products数组的第一个元素。

pIndex = json.Products;
for(var i = 0; i < pIndex.length; i++) {
  screenItem = pIndex[i];

  var $span = $('<span />').text(screenItem.ProductCode);
  $("#content_area.").append($span);
}

答案 1 :(得分:0)

如果你总是从你的ajax调用返回json,最好将你的ajax dataType属性设置为“json”,这样你就不需要自己解析文本了(使用eval方法或parseJSON)方法)。此外,jQuery.each函数优于标准的javascript for循环。

我会写这样的代码:

jQuery(function(){
    jQuery.ajax({
       url: '/AjaxCart.asp',
       cache: false,
       dataType: 'json',
       success: function(data) {
          jQuery.each(data.Products, function(index, element) {
             $("#content_area").prepend(element.ProductCode);
          });
       },
       error: function() {
          return false;
       }
    });
 });