ajax如何处理服务器返回的3种数据格式
这篇东西本身是非常基础的,但是经常在处理ajax返回值的时候还是会犯各种小错误,所以就想到把这些方法结合以前写过的代码片段整理一下,方便以后复习和使用。另外呢,虽然能搜到很多类似的文档,但是整理一份自己的还是坠吼的= ̄ω ̄= ajax方法的参数常用的ajax参数比如url,data,type,包括预期返回类型dataType,发送到服务器的数据的编码类型contentType,成功方法,失败方法,完成方法。除了这些以外还有很多其他内置的参数 function(XMLHttpRequest){ this; //调用本次ajax请求时传递的options参数 } 9.complete: function(XMLHttpRequest,textStatus){ this; //调用本次ajax请求时传递的options参数 } 10.success:要求为Function类型的参数,请求成功后调用的回调函数,有两个参数。 (1)由服务器返回,并根据dataType参数进行处理后的数据。 (2)描述状态的字符串。 function(data,textStatus){ //data可能是xmlDoc、jsonObj、html、text等等 this; //调用本次ajax请求时传递的options参数 } 11.error: function(XMLHttpRequest,textStatus,errorThrown){ //通常情况下textStatus和errorThrown只有其中一个包含信息 this; //调用本次ajax请求时传递的options参数 } 12.contentType: function(data,type){ //返回处理后的数据 return data; } 14.dataFilter: function(data,type){ //返回处理后的数据 return data; } 15.global: $(function(){ $(‘#send‘).click(function(){ $.ajax({ type: "GET",url: "test.json",data: {username:$("#username").val(),content:$("#content").val()},dataType: "json",success: function(data){ $(‘#resText‘).empty(); //清空resText里面的所有内容 var html = ‘‘; $.each(data,function(commentIndex,comment){ html += ‘<div class="comment"><h6>‘ + comment[‘username‘] + ‘:</h6><p class="para"‘ + comment[‘content‘] + ‘</p></div>‘; }); $(‘#resText‘).html(html); } }); }); }); 22.顺便说一下$.each()函数: 需要注意的地方: 1. 如果不指定dataType的话,会根据返回的头部信息判断(就是Content-type)。 综论ajax返回3种数据格式:html文本格式,xml通用格式,json格式, ajax返回整数类型/** * ajax_delete */ $(".delete").click(function(){ var id = $(this).attr('id'); var flag = confirm("确定要删除第"+id+"条信息吗?"); if(flag){ var tr = $(this).parent().parent(); $.get("index.php?r=demo1/delete",{id:id},function(data){ console.log(data); if(data==1){ tr.remove(); alert("删除成功"); }else{ alert("删除失败"); } }) } }) 这样,后台一个判断,执行则返回1就好了,可以说是最简单的ajax了。 ajax返回Html/text(字符串类型)与上面返回int相对应的呢...比如ajax添加,就会返回html或者text,也就是string类型的数据。 ajax返回json因为json没有格式,相同内容占用空间少处理快,所以较xml,字符串(text/html)而言,我们更经常处理json。 $.ajax({ type:"GET",url:"address_do.php",//dataType:"json",data:{postcode:postcode},success:function(data){ console.log(data); location.href="address_do.php"; if(data.success == 1){ var str = ""; str += "<p>"+data.result.lists[0].simcall+"</p>"; str += "<p>"+data.result['asc']+"</p>"; $("button").after("<span>"+str+"</span>"); } } }) $.get(url,function(msg){ msg = eval("("+msg+")"); if(!(/^[0-9][0-9]{5}$/.test(postcode))){ str += "<p>您输入的邮政编码不正确</p>"; $("button").after("<span>"+str+"</span>"); }else{ str += "<p>"+msg.result.lists[0].simcall+"</p>"; str += "<p>"+msg.result['asc']+"</p>"; $("button").after("<span>"+str+"</span>"); } },'json');alert(data); success:function(data){ console.log(data); var result = data['result']; var str = ""; str += "<table border='1'><tr><td>手机号</td><td>归属地</td><td>区号</td><td>数据来源</td></tr><tr><td>"+result['phone']+"</td><td>"+result['att']+"</td><td>"+result['postno']+"</td><td></td></tr></table>"; $("#click").after(str); } $.ajax({ type: "GET",url: "Ajax/Test.ashx",data: "HandleType=GetList&PName=" + escape($("#localvalue").val()),//要发送的数据 dataType: "text",success: function (data) { if (data != null && data != "") { var dataObj = eval("(" + data + ")"); //转换为json对象 var html = ""; for (var i = 0; i < dataObj.length; i++) { html += "<tr style='cursor:pointer;' onclick="InfoWindow('" + dataObj[i].Name + "','" + dataObj[i].ID + "','" + dataObj[i].Code + "');">"; html += "<td>" + (parseInt(i) + parseInt(1)) + "</td><td>" + dataObj[i].Name + "</td>"; html += "</tr>"; } $("#table").html(html); } } }) html部分 <table id="table" style="line-height:25px; margin:2px; "></table> eval的使用PS:红色部分是容易出错的地方,也就是ajax返回数据的拼接,也是ajax的难点之一。 $("#search").click(function(){ var obj = $(this); var searchContent = obj.prev().val(); alert(searchContent); $.ajax({ url:"index.php?r=news/search",type:"post",dataType:"json",data:{searchContent:searchContent},success:function(data){ var str = ""; str+='<table border="1" id="table">'; str+='<tr>'; str+='<td>ID</td>'; str+='<td>新闻标题</td>'; str+='<td>新闻内容</td>'; str+='<td>分类</td>'; str+='<td>图片</td>'; str+='<td>操作</td>'; str+='</tr>'; if(data == 0){ str+="<tr>没有搜索到相关数据</tr>"; }else{ for(var i=0;i<data.length;i++){ str+='<tr>'; str+='<td>'+data[i].news_id+'</td>'; str+='<td>'+data[i].newsTitle+'</td>'; str+='<td>'+data[i].newsContent+'</td>'; str+='<td>'+data[i].cate_name+'</td>'; str+='<td><img src="'+data[i].img_name+'" alt="" width="100px" height="60"></td>'; str+='<td><a href="'+data[i].news_id+'">删除</a>/<a href="'+data[i].news_id+'">修改</a></td>'; str+='</tr>'; } } $("#table").html(str); } }) }) 说实话,即使把这个掌握了,即使是处理一些最简单的项目也并不是能轻易拿下,因为实际生产环境涉及到的业务逻辑啊,框架啊(比如yii框架会默认加载模板,这样返回值会很难处理)等等一些我们意想不到的东西。但是我目前的看法是,ajax处理的话代码逻辑会非常清晰,再者说ajax的确是作为一个码农最基本的技能之一。第一次写博客兼学识有限,以后还会有修改,求轻拍。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |