Jquery ajax错误的数据响应

时间:2017-02-26 18:17:53

标签: php jquery ajax

看起来我输错了类型或其他事情

function updateCart()
{
var dataArray= [];
 var  i=0;
 var item;
$('.cd-cart .wrapper .body .product').each(function()
{
  var item=new Array();
  i++;
  var $element = $(this)
  qty=parseInt($element.find('select').val());
  name=$element.find('h3 a').html();
  price=parseInt($element.find('.price1').text().replace('₽',''));
  id=parseInt($element.attr('id').replace('product_',''));
  image=$element.find('img')[0].src;
item['id']=id;
  item['price']=price;
  item['name']=name;
  item['qty']=qty;
  item['image']=image;

  dataArray.push(item);
});
var jObject={};
jObject = JSON.stringify(dataArray);
 $.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        }
    });
$.ajax({
    url: '/updateCart',
    type: 'get',
    dataType:'json',
     data: ({dataArray:jObject}),
success:function(data){
          console.log(data);
      },
      error:function(error){
        console.log(error);
      }
}); 
}

服务器端返回$ _GET; 我从服务器得到了这个响应:Object {dataArray:“[[],[]]”} 我该怎么做才能获得正常响应? P.S dataArray是一个数组

的数组

1 个答案:

答案 0 :(得分:1)

我在尝试减少你的代码流程的时候做了一些重新格式化。通常,如果您需要在JavaScript中进行关联数组样式分组,则需要使用对象,而不是数组。数组是索引的,对象是键控的。在我的例子中,我使用构造函数来构建你的项目。您也可以let data = {};然后构建像data.id = 1这样的密钥。

// formatted for readability.
function updateCart() {
  const data = buildCart();
  let dataObj = JSON.stringify(data)
  makeRequest('/updateCart', dataObj);
}

function buildCart() {
  let data = [];

  $('.cd-cart .wrapper .body .product').each(function() {
    const $element = $(this);
    let qty = parseInt($element.find('select').val())
     ,  name = $element.find('h3 a').html()
     ,  price = parseInt($element.find('.price1').text().replace('₽',''))
     ,  id = parseInt($element.attr('id').replace('product_',''))
     ,  image = $element.find('img')[0].src;

    data.push(new Item(id, price, name, qty, image));
  });

  return data;
}

function Item(id, price, name, qty, image) 
{
  this.id = id
  this.price = price;
  this.name = name;
  this.qty = qty;
  this.image = image;
}

function makeRequest(url, dataObj) 
{
  let token = $('meta[name="csrf-token"]').attr('content');
  let jqXHR = $.ajax({
    url: url,
    type: 'GET',
    headers: 'X-CSRF-TOKEN': token,
    dataType: 'json',
    jsonp: false,
    data: {dataArray: dataObj}
  });

  jqXHR.done(function(data, status, jqXHR) {
    // success
  });

  jqXHR.fail(function(jqXHR, status, error) {
    // failure
  });
}