使用jQuery的ajax发送数据时候,发现后台无法接受到数据,代码如下:
$(".radioServer").click(function () {
$.ajax({
url : "/hos/insertHos",
type : "post",
async : true,
contentType: "application/json; charset=utf-8",
data : {
"bedId":$("#bedId").val(),
"instro":$("#instro").val()
}
然后发现是:
contentType: "application/json; charset=utf-8",
这一行代码导致的问题,把这一行删除了就可以执行。在一般情况下ajax发送数据不需要设置contentType的类型,只有在发送比较复杂的嵌套数据时才会用到,由于我这个ajax是直接把上边的ajax拿过来用的,并没有考虑到两者传输数据的差别,所以没有删除这一行代码,这才导致了问题的产生。然后我顺道查看了contentType的相关知识,才发现问题的根本原因:
$.ajax contentType 和 dataType , contentType 主要设置你发送给服务器的格
式,dataType设置你收到服务器数据的格式。
contentType都是默认的值:application/x-www-form-urlencoded。
即为:“name=value & name=value ”(id=123 & name = abc).
但是在复杂情况下application/x-www-form-urlencoded这种格式无法生成json数据:
{
data: {
info: [{
id: 123,
name:abc
}]
}
在http协议中允许我们自定义数据类型,为了传输这种复杂的嵌套数据,我们就在程序中定义了application/json这种数据类型来处理比较复杂的嵌套数据。但是这种格式需要我们用 JSON.stringify序列化后,然后才可以发送到服务器端,最后用 JSON.parse 进行数据还原。我的错误就是将contentType从默认格式设置成了application/json格式,却没有将数据序列化就发送给服务器,这才导致了数据无法传输。
引以为戒,看来以后在不知其所以然的时候还是不要图省事盲目复制的好。