2014-07-08 40 views
0

我想在ajax調用中傳遞javascript對象數組。ajax調用錯誤的javascript數組序列化

我讓我的數組是這樣的:

var itemsToEdit = []; 
    $(".editedItem[value='true']").closest("tr").each(function() { 
     var itemToEdit = { 
     id: $(this).find(".idInput").val(), 
     name: $(this).find(".nameInput").val(), 
     code: $(this).find(".codeInput").val() 
     }; // Represents SomeClass java class with fields: id, name, code 
     itemsToEdit.push(itemToEdit); 
    }); 

然後執行Ajax調用:

$.ajax({ 
     url: "MyActionBean.action?saveChanges", 
     type: "Post", 
     dataType: "json", 
     data: itemsToEdit, 
     success: function(data) { 
     alert("Oh, no"); 
     } 
    }); 

問題是:在服務器端,我收到地圖列表,而不是SomeClass的對象列表。 我查了一下瀏覽器發送,它是:

itemsToEdit[0][id]:4 
itemsToEdit[0][name]:Florida 
itemsToEdit[0][code]:FL 
itemsToEdit[1][id]:3 
itemsToEdit[1][name]:California 
itemsToEdit[1][code]:CA 

但我當然希望能有這個,因爲我認爲這是正確的映射SomeClass的列表:

itemsToEdit[0].id:4 
itemsToEdit[0].name:Florida 
itemsToEdit[0].code:FL 
itemsToEdit[1].id:3 
itemsToEdit[1].name:California 
itemsToEdit[1].code:CA 

我在哪裏錯了?

(也許並不重要信息,瞭解背景:我使用的條紋框架和它在請求映射參數稱爲ActionBean的字段)

謝謝!

+0

'itemsToEdit [0] [id]:4'和'itemsToEdit [0] .id:4' UM,它們意味着同樣的事情。括號和點符號。 – epascarello

+0

好的。但是Stripes框架並不這麼認爲:)因爲第一個變體是通過條帶映射到:private List > itemsToEdit;第二個變體爲:private List itemsToEdit; –

+0

如果你將一個數組傳遞給'data:',那麼jQuery幾乎不會做你期望的事情。你有沒有檢查你的POST請求的實際內容? – Bergi

回答

0

我可以看到一些可能會丟掉條紋的東西。

  1. 雖然沒有什麼,你現在正在發送會引起問題,你應該在你傳遞數據使用JSON.stringify()

  2. AJAX調用通常發送JSON對象,而不是數組。

嘗試發送和接收,像這樣的數組:

$.ajax({ 
    url: "MyActionBean.action?saveChanges", 
    type: "Post", 
    dataType: "json", 
    data: { 
     'items': JSON.stringify(itemsToEdit) 
    }, 
    success: function(data) { 
     alert("Oh, no"); 
    } 
}); 

另一方面,檢索接收到的對象的items財產和解析的那個,而不是整個對象。