项目中遇到了jquery ajax 返回json数据的问题,通过大家的帮助一一 解决了,想起来真是汗颜,以前对这方面只知道用,没有思考,以至于遇到实际问题解决起来不是那么得心应手,算是给自己提个醒吧。
本文所使用的版本为jquery-1.7.1.js(未压缩版),未经特殊注明,下文中称为jquery。
jquery只是将普通的ajax事件进行了自己的封装,提供了一些比较好的实现方法。
1.jQuery.ajax(url,[settings]) 返回值为XMLHttpRequest对象
例子
var data=$.ajax({ type:"POST", url:"http://10.0.1.9:8026/JSONDemo/servlet/UserLoginServlet", async:false, data:strUser, error:function(xmlHttp_req,textStatus,errorThrown){ console.error("xmlHttpRequest error:",xmlHttp_req); }, dataType:"json", success:callback });
function callback(data){ if(data.suc==1){ $("#showMsg").text(data.msg); } else{ var show=$("#showMsg"); show.css("color","red"); show.html(data.msg); } }
可选参数:
async:true/false :是否是异步请求
contentType:如果是发送请求的话,默认是"application/x-www-form-urlencoded" 如果是文件上传请改为:multipart/form-data
data:传入的数据 默认是key/value 都是[object,object],自动被转换为字符串形式
dataType:总共是5种 分别是:
"xml": 返回 XML 文档,可用 jQuery 处理。
"html": 返回纯文本 HTML 信息;包含的script标签会在插入dom时执行。
"script": 返回纯文本 JavaScript 代码。不会自动缓存结果。除非设置了"cache"参数。'''注意:'''在远程请求时(不在同一个域下),所有POST请求都将转为GET请求。(因为将使用DOM的script标签来加载)
"json": 返回 JSON 数据 。
"jsonp": JSONP 格式。使用 JSONP 形式调用函数时,如 "myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。
"text": 返回纯文本字符串
success(data, textStatus, jqXHR):请求成功后执行的函数 例如:上面例子中的callback
2.jQuery.post(url, [data], [callback], [type])
还是上面的例子,我改写成jQuery.post实现,相比上面的更简洁,但是当出现异常的时候调试比较麻烦。
var data=$.post( "http://10.0.1.9:8026/JSONDemo/servlet/UserLoginServlet", strUser, callback, "json");
3.jQuery.get(url, [data], [callback], [type])
其实就是通过get方式提交ajax请求,这里我就不写实现方式了,需要注意的是get方式传参的时候中文处理。
4.jQuery.getJSON(url, [data], [callback])
这个比get方式更加简洁,直接返回JSON类型数据,尤其适用于传简单数据类型参数。