jQuery-ajax常见属性
contentType
含义:发送信息至服务器时的内容编码类型
类型:String
或 Boolean
默认值:application/x-www-form-urlencoded; charset=UTF-8
;默认值适合大多数情况
注意:jQuery-1.6之后可以将此属性设为 false
,当该属性为 false
时,即告诉服务器不设置任何一种 contentType
dataType
含义:预期服务器返回的数据类型
类型:String
默认值:如果不指定,jQuery 将自动根据 HTTP 包 MIME 信息来智能判断,可用值:
xml
:返回 XML 文档,可用 jQuery 处理
html
:返回纯文本 HTML 信息;包含的 script 标签会在插入 dom 时执行
script
:返回纯文本 javascript 代码;不会自动缓存结果;除非设置了 cache
参数
json
:返回 json 数据
jsonp
:JSONP 格式
text
:返回纯文本字符串
processData
含义:发送
data
至服务器时将data
进行转化
类型:Boolean
默认值:true
;默认情况下,通过 data
选项传递至服务器的数据,如果是一个对象(技术上讲只要不是字符串),都会默认转换成一个查询字符串,以配合默认的 内容类型(contentType) application/x-www-form-urlencoded
;如果要发送 DOM 数信息或其它不希望转换的信息(例如 file
),请设置为 false
jQuery-ajax 常见问题
在使用 jQuery-ajax 实现异步文件上传时要注意,要将 contentType
和 processData
属性设置为 false
;否则服务器接收不了上传的文件
示例
$("#ajax_upload").click(function () {
var formData = new FormData();
formData.append("file",document.getElementById("file0").files[0]);
$.ajax({
url : "ajaxUpload",
data : formData,
type : "post",
contentType:false,
processData:false,
success : function(response){
console.log(response);
}
});
});
注意:
contentType
默认值为application/x-www-form-urlencoded; charset=UTF-8
,而 文件上传 的contentType
应该为multipart/form-data
,将
contentType
设置为false
后,服务器检测到上传的是文件类型时,会自动将Request
的headers
中的contentType
设置为multipart/form-data
- 上传文件时向服务器传输的是文件类型,此时不需要将数据转换为查询字符串,就保持为文件本身,因此要将
processData
设置为false
- jQuery 的 id 选择器 获取不了 文件对象(不知怎么回事),使用原生 javascript 的
document.getElementById
可以获取 - 在 Controller 方法中返回
String
时要注意,若返回的字符串 包含中文,则需要在@RequestMapping
注解中加上produces = {"text/html;charset=UTF-8;"}
,否则会出现中文乱码
@RequestMapping(value = "ajaxDemo",produces = {"text/html;charset=UTF-8;"})
@ResponseBody
public String ajaxDemo(String username){
System.out.println(username);
return username;
}
- Controller 中的方法返回是
String
时,jQuery-ajax 中的dataType
属性应该设置为text
,而不能设置为json
- SpringMVC 中有一系列
HttpMessageConverter
来处理用@ResponseBody
注解的返回值,如返回List
或其它的类型则使用MappingJacksonHttpMessageConverter
来处理;返回String
时,则使用StringHttpMessageConverter
来处理,而StringHttpMessageConverter
使用的字符集是iso-8859-1
,而且是fianl
的。所以当返回text
有中文时会出现乱码