java web的一些特殊用法(一)
1.查看jquery ajax请求的数据的具体格式
很多时候,我们需要查看到ajax返回时的具体格式才知道怎么去解析他。在最原始的ajax写法中,可以通过xmlhttp.responseText查看到ajax请求的原始数据,但使用框架后,这个数据就没法查到了。这里我们想到了一种跳过ajax框架的作法:直接使用链接请求:比如:
1 $.ajax({ 2 type: "get",//使用get方法访问后台 3 dataType: "json",//返回json格式的数据 4 url: "${ctx}/ai/AIAction.do?",//要访问的后台地址 5 data: "method=get_ai_list",//要发送的数据 6 success: function(data){//msg为返回的数据,在这里做数据绑定 7 /*代码体*/ 8 }, 9 error:function(){ 10 alert("error"); 11 } 12 });
可以直接使用请求${ctx}/ai/AIAction.do?method=get_ai_list到浏览器地址栏中查看。
顺便说一下,其实ajax请求的原理就是你后台给他什么,就带回来什么,并且是谁请求他,就将结果返回给谁。
2.layer弹出层与jquery不兼容的解决方案
本来只是一个bug,我开始被这个东西搞的很头疼。但后来我一想,为什么不从反面去应他呢,下面就说说这种做法。
<script src="http://res.xiami.net/pc/lay/lib.js"></script> <script src="${ctx}/layer/layer.min.js"></script> <script type="${ctx}/js/jquery-1.8.3.js"></script> function zOpen(totalCount){ $.layer({ type : 2, title : '结帐消息', iframe : {src : '${ctx}/jiezhang.jsp?totalCount='+totalCount}, area : ['400px' , '300px'], offset : ['100px',''], time:3 }); } function checkout(totalcount) { var goodids = document.getElementsByName("GoodsIDs"); var goodsidstr = ""; for(var i = 0;i < goodids.length;i++) { //alert(sortids[i].value); goodsidstr += goodids[i].value+','; } goodsidstr = goodsidstr.substring(0,goodsidstr.lastIndexOf(',')); if(confirm('你确认要支付'+totalcount+'元?')) { $.ajax({ url: '${ctx}/good/GoodServlet?action=add_orders&giflag=1&goodsidstr='+goodsidstr, type: 'post', dataType: 'xml', timeout: 1000, error: function(){ alert('校验失败'); }, success: function(data){ $(data).find("response").each(function(index,ele){ var passed = $(ele).find("passed").text(); if(passed == 'true') zOpen(totalcount); else alert('支付失败'); }); } }); setTimeout('reLoad()',6000); } else return; }
注意到这两段代码中都有$,他们是不一样的,第一个是$是来自layer层的,第二是来自jquery的,这个时候,要保持他们的兼容特性
就要注意到<script src="${ctx}/layer/layer.min.js"></script><script type="${ctx}/js/jquery-1.8.3.js"></script>第二个引用本来是错的,但为什么这里可以正常使用呢?主要是利用了浏览器的一个“容错的特性”,他们自动把第二个引用当作正确的引用,还不会报错。