只想知道为什么javascript的push方法插入“index”
var agendaBatch=[];
for(var i=0; i<agendas.length; i++) {
var agenda = {
MeetingId: meetingId,
Title: agendas[i].title,
Description: agendas[i].description,
Remarks: "",
};
agendaBatch.push(agenda);
}
console.log(kendo.stringify(agendaBatch));
dataSourceAgenda.add(agendaBatch);
dataSourceAgenda.sync();
输出:
{"0":{"Title":"Agenda title","Description":"Agenda details","Remarks":""},
"1":{"Title":"Agenda title","Description":"Agenda details","Remarks":""}}
我期望此输出符合我的Web API参数要求
[{"Title":"Agenda title","Description":"Agenda details","Remarks":""},
{"Title":"Agenda title","Description":"Agenda details","Remarks":""}]
有任何建议我该怎么做?....
更新:刚刚发现,我正在使用kendo ui数据源,当我删除模式上的Id时修复了问题
var dataSourceAgenda = new kendo.data.DataSource({
transport: {
type: "odata",
create: {
type: "POST",
url: API_URL + "/agendas",
contentType: "application/json; charset=utf-8",
dataType: 'json'
},
parameterMap: function (options, operation) {
if (operation !== "read" && options) {
return kendo.stringify(options);
}
}
},
schema: {
model: {
id: "Id", //I get my desired output if this is removed
fields: {
MeetingId: { type: "number" },
Title: { type: "string" },
Description: { type: "string" },
Remarks: { type: "string" },
}
},
}
});
但是我需要其他函数中的Id参数,无论如何我都可以在不删除kendo数据源中的Id的情况下执行此操作。
更改了问题标题!
答案 0 :(得分:3)
根据Kendo UI DataSource(here)的文档,add
方法接受Object
而不是array
Object
。
此外,您使用名为id
的{{1}}字段作为Id
的字段,不在model
的字段中。
尝试执行以下操作:
var dataSourceAgenda = new kendo.data.DataSource({
transport: {
create : function (op) {
...
},
parameterMap: function (options, operation) {
if (operation !== "read" && options) {
return kendo.stringify(options.models);
}
}
},
batch : true,
schema : {
model: {
id : "Id", //I get my desired output if this is removed
fields: {
Id : { type: "number" },
MeetingId : { type: "number" },
Title : { type: "string" },
Description: { type: "string" },
Remarks : { type: "string" }
}
}
}
});
即:
batch
设置为true
,以便在您调用sync
时能够一次发送多个请求。Id
定义中定义schema.model.fields
。stringify
的{{1}}。答案 1 :(得分:0)
由于agendaBatch
显然是一个数组,我假设kendo.stringify
没有正确地序列化它。您可以使用JSON.stringify
。
请注意,旧浏览器并未实现此功能。如果你需要支持它们,你可以包括道格拉斯克罗克福德的剧本:
https://github.com/douglascrockford/JSON-js/blob/master/json2.js
修改
现在你改变了问题 - 我对kendo ui并不熟悉,所以这只是一个疯狂的猜测,试图帮助你解决更新后的问题。
您似乎可以访问data
功能中的beforeSend
。您可以尝试根据自己的需要进行操作,例如:
beforeSend: function (xhr, s) {
var arrayData = [];
for (var id in s.data) {
arrayData.push(s.data[id]);
}
s.data = arrayData;
}