哈哈,如果返回http消息头中指定了“Content-Type: application/json”的话,jQuery回调函数中传入的data是直接解析后的json对象,如果不指定Content-Type(就是用默认的),jQuery回调函数中传入的data是string字符串。
不看文档没常识。仔细看了jQuery.ajax() 的文档,里面有非常详细的说明。jQuery.ajax()是使用jQuery进行ajax调用的客户端底层函数,提供了丰富的选项,用以控制发送、接收ajax消息的方方面面。其中dataType制定了server回来的数据的类型,是json的话就解析成json对象,是xml的话就解析成xml dom元素,是script的话就执行script脚本,是html的话就parse它,默认dataType是智能选择,说白了就是根据response中的Content-Type决定是应该怎么处理。显然,如果response的header中指定了Content-Type为application/json,就会解析为json对象。
另外,解析json应答时,json必须是标准格式的,即key必须带引号,并且是双引号,否则解析出错。
jQuery.ajax()是jQuery处理ajax的最底层函数,使用起来最灵活,也就意味着最难用。一般只用一些上层包装函数,包括:
1. jQuery.get()
发送HTTP GET请求,回调函数处理应答
2. jQuery.getScript()
发送HTTP GET请求,设置dateType为script,需要server返回script
3. jQuery.getJSON()
发送HTTP GET请求,设置dataType为json,需要server返回json数据
4. object.load()
类似于jQuery.get(),但这是一个jQuery对象的方法,而非jQuery全局方法,可以直接用一个对象调用load,然后将信息写到这个对象中。
5. jQuery.post()
类似jQuery.get(),发送的是HTTP POST请求。
服务器端,一般的服务器语言都提供了对json格式和本语言数据结构的序列化和反序列化方法,节省了手工构造严格的json字符串的工作量。
在php中,提供了json_encode和json_decode函数,其中json_encode接收任意一个非resource的数据结构,将其转化为严格符合规范的json字符串,对于返回json应答数据非常有用。