AJAX 教程
AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。
在应用时主要是创建XMLHttpRequest对象,调用指定服务地址。
但是IE中各个版本支持的不太一样,所以在创建次对象时可能要特殊处理下。
一般如下:
function createXMLHttpRequest(){ var xmlhttp; try{ xmlhttp = new XMLHttpRequest();//ie7及以上,其他浏览器 }catch(e){ try{ xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");//ie6 }catch(e){ try{ xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");//ie6以下 }catch(e){ throw "创建AJAX对象失败!"; } } } return xmlhttp; } var xmlhttp = createXMLHttpRequest(); xmlhttp.open("GET","http://localhost:8080/SimpleBlog/AjaxTest",true); xmlhttp.send(null); xmlhttp.onreadystatechange = function(result){ if(xmlhttp.readyState==4 && xmlhttp.status == 200){ alter(result.test); } };
但是浏览器再执行javascript代码时,有个著名的同源策略,这使得跨域请求就不是那么方便了。
那一般都是用什么方式支持跨域呢?
1、通过中间代理服务器,获取要跨域请求的数据。
2、通过iframe内嵌带请求域的页面,来解决跨域访问问题。
3、通过jsonp方式。
4、不过现在已经提出了XMLHttpRequest Level2(XHR2)允许跨域请求,不过要在server的返回头中显示声明允许跨域请求(浏览器的支持情况:http://caniuse.com/#feat=xhr2)。
下面简单说下jsonp与xtr2。
jsonp:
jsonp简单的说就是利用<script>标签来实现跨域请求的调用,因为浏览器中脚本的加载是不受同源策略影响的。
function get() { var url = 'http://localhost:8080/SimpleBlog/AjaxTest"type","text/javascript"); script.src = url; document.body.appendChild(script); } function callback(va){ alert(va.test); }
服务端(java):
boolean jsonP = false; String cb = this.request.getParameter("callback"); if (cb != null) { jsonP = true; response.setContentType("text/javascript"); } else { response.setContentType("application/x-json"); } PrintWriter out = response.getWriter(); if (jsonP) { try { out.println(cb + "({\"test\":\"1\"})"); out.flush(); out.close(); } catch (Exception e) { throw e; } }
这样就可以实现跨域调用了。
而我们经常用的jquery已经实现了此类方式的封装,使用起来更简单。
$(document).ready(function (){ $('#jqueryajax').bind('click', function(){ $.ajax({ type: 'get', async: false, url: 'http://localhost:8080/SimpleBlog/AjaxTest1', dataType: 'jsonp', jsonp: 'callback', success: function(json){ alert(json.result); }, error: function(){ alert('fail'); } }); }); });
服务端(java):
我用了struts是这样写的:
public class AjaxTest1 extends ActionSupport { private String result; public String getResult() { return result; } public String execute() { this.result = "1"; return "jqueryajax"; } }
配置文件:
<action name="AjaxTest1" class="AjaxTest1"> <result name="jqueryajax" type="json"> <param name="callbackParameter">callback</param> </result> </action>
下面说说xtr2:
这个就更简单了,直接创建调用即可。
function createCORSRequest(method,url){ var xhr=new XMLHttpRequest(); if('withCredentials' in xhr){ xhr.open(method,url,true); }else if(typeof XDomainRequest!='undefined'){ xhr=new XDomainRequest(); xhr.open(method,url); }else{ xhr=null; } return xhr; } function xhr2(){ var request=createCORSRequest('GET','http://localhost:8080/SimpleBlog/AjaxTest1'); if(request){ request.onload=function(){ alert(request.responseText); } request.onerror=function(e){ alert('error'); } request.send(); } }
服务端:其实只要在返回response中设置
httpResponse.addHeader("Access-Control-Allow-Origin", "*");
即可。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]