2017-02-26 9 views
-2

サーバー側は$ _GETを返しました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); 
     } 
}); 
} 

に私が行く間違った型か何かを持っているように見えます。 私はサーバーからこの応答を受け取りました:Object {dataArray: "[[]、[]]"} 正常な応答を得るにはどうすればよいですか? P.S dataArrayは配列の配列です

+0

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のようなキーを作成することもできます。私はここでの問題を見ることができると思いますが、デバッグの目的で、我々はあなたのサーバーが要求を取得し、それはあなたがおそらくあなたのAJAX呼び出しをコメントアウトし、ちょうど印刷してみてくださいすることができます応答として見るものを送り返している知っているので、

// 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時間を費やし、解決には至らなかった。 –