2017-02-26 87 views
-2

看起來,我得到了錯誤的類型或一些事情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是一個數組陣列

+0

我想我可以看到這裏的問題,但爲了調試的目的,因爲我們知道您的服務器獲取請求,併發送回它認爲你可能註釋掉你的AJAX調用,只是嘗試打印響應dataArray到控制檯。確保你發送的是你認爲你始終是我的第一步用JavaScript :)。 –

+0

@DLowther這是數組看起來像一些數據[Array [0]] 0:Array [0] id:9 image:「items/2ktXCd2j1488052733.jpg」name:「Free」price:123 qty:2 JSON .stringify我得到了:[[]] –

回答

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 
    }); 
} 
+0

謝謝,幫了很多。在此之前,我花了1.5個小時,並沒有得出解決方案。 –