我正在使用Knockout.js和ASP.NET web ApiController完成一个新项目。我看到的许多示例在将数据发布到服务器之前执行了一些手动JSON序列化。此外,请求内容类型通常也设置为“application / json”。
我想知道为什么这是必要的。我假设有一些我尚未遇到过的东西要么是必需的,要么至少是优选的。
目前,我在使用这些jQuery ajax选项向服务器发送任何我想要的数据时没有问题:
cache: false,
traditional: true,
type: 'POST',
这是一个示例JS对象和相应的服务器端C#模型对象,它可以很好地POST和绑定到ApiController动作方法。
//JS object
var requestDataObject = {
accountId: vm.accountId,
range: [1, "a'b\"c", 3],
start: new Date(2012, 12, 12)
};
//C# model object
public class RequestData
{
public int AccountId { get; set; }
public string[] Range { get; set; }
public DateTime Start { get; set; }
}
//Action method signature
[HttpPost]
public HttpResponseMessage GetAccountUsage(RequestData requestData){
...
我错过了什么?
答案 0 :(得分:4)
历史上,GET(以及随后的POST)只能发送键值对,键应该是唯一的。
当PHP出现时,它定义“如果一个键包含方括号,让我们构建一个数组”。这使程序员可以调用他们的复选框name="chkbox[]"
,让表单正常提交,并将$_POST['chkbox']
作为数组读取。定义了一些其他服务器语言,“如果在查询字符串中重复一个键,让我们构建一个数组”。
如果要支持密钥names[]=1
,为什么不names[a][b][c]=1
?服务器知道应该做什么:分配names = {a:{b:{c:"1"}}}
。
这使程序员能够编码对象以查询字符串,只需捕获一些:
checkboxes[]=ch1&checkboxes[]=ch2&...
与checkboxes=["ch1","ch2",...]
traditional
(或者在服务器上求助于postVars.get("names[]")
)使用JSON,
null
,... 简而言之,如果您只需要对键值对进行编码,那就是普通的GET或POST擅长的。如果你需要编码数组,JSON绝对值得考虑。如果您需要更复杂的东西,JSON是使用某些服务器的唯一方法。