2013-03-20 82 views
0

我想在我的ajax保存函數中發送多個數據數組。JS AJAX發送多個數據數組

我可以單獨做每個數組,如data:hardwarePayload,它會工作。如果我這樣做{hardware: hardwarePayload, service:servicePayload}我得到非常奇怪的JSON輸出。看起來像:

硬件=%5B%7B%22hardwareName%22%3A%221%22%2C%22hardwareQuantity%22%3A%22%22%2C%22hardwareBYOD%22%3A%22%22 %7D%5D &服務=%5B%7B%22serviceName%22%3A%223%22%2C%22serviceQuantity%22%3A%22%22%7D%5D

我真的需要兩個陣列一個硬件和一個服務,所以我可以分別抓住每一個。

我的代碼看起來是這樣的..

self.save = function (form) { 
    var hardwareModel = []; 
    var serviceModel = []; 
    ko.utils.arrayForEach(self.services(), function (service) { 
     serviceModel.push(ko.toJS(service)); 
    }); 
    ko.utils.arrayForEach(self.hardwares(), function (hardware) { 
     hardwareModel.push(ko.toJS(hardware)); 
    }); 
    //allModel.push({accountId: ko.toJS(account)}); 
    var hardwarePayload = JSON.stringify(hardwareModel); 
    var servicePayload = JSON.stringify(serviceModel); 
    //alert(JSON.stringify(serviceModel) +JSON.stringify(allModel)); 
    $.ajax({ 
     url: '/orders/add', 
     type: 'post', 
     data: {hardware: hardwarePayload, service:servicePayload}, //   data:hardwarePayload, 
     contentType: 'application/json', 
     success: function (result) { 
      alert(result); 
     } 
    }); 
}; 

回答

0

我想你會好起來的,如果你不字符串化數據

$.ajax({ 
    url: '/orders/add', 
    type: 'post', 
    data: {hardware: hardwareModel, service:serviceModel}, //   data:hardwarePayload, 
    contentType: 'application/json', 
    success: function (result) { 
     alert(result); 
    } 
}); 

(請注意,我正在使用而不是 stringified hardwareModel and serviceModel

這樣你就可以讓jQuery處理請求的(json)數據。

+0

我收到了同樣的事情。這是Knockout.js,如果這很重要.. – ipengineer 2013-03-20 23:16:06

0

你應該試試這個

var hardwarePayload = hardwareModel; 
var servicePayload = serviceModel; 

var postData = {'hardware': hardwarePayload, 'service':servicePayload}; 

var postData = JSON.stringify(postData); 

alert(postData); 

$.ajax({ 
    url: '/orders/add', 
    type: 'post', 
    data: postData, 
    contentType: 'application/json', 
    success: function (result) { 
     alert(result); 
    } 
});