那些年我学的知识--ajax浅析
ajax:一个web开发必须用到的技术,作为一个.net开发,在工作中自学了一些ajax的知识,自知才疏学浅,拜读了园子里一位大师的文章,对自己的所学加以总结,希望对大家有所帮助,闲话少说,且看代码:
/* * * CM-ajax * Version:0.1 * Date:2015/2/28 * ajax 请求封装 * Get:get方式发送 * Post:post方式发送 * * _http:XmlHttpRequest请求对象 * * 注意: * param:要求所传入的参数为json格式 */ function _initHttp() { var _http = false // IE7+,FF,Chrome try { _http = new XMLHttpRequest(); } catch (trymicrosoft) { // IE6- try { _http = new ActiveXObject("Msxml2.XMLHTTP"); } catch (othermicrosoft) { try { _http = new ActiveXObject("Microsoft.XMLHTTP"); } catch (failed) { _http = false; } } } if (!_http) { alert('sorry!your browser do not support async http request'); } return _http; } var CM = { get: function (url, param, handler) { var _http = _initHttp(); var _para = _makeParam(param); _http.open("GET", url, true); _http.onreadystatechange = function () { if (_http.readyState == 4 && _http.status == 200) { handler(_http.responseText); } }; _http.send(_para); }, post: function (url, param, handler) { var _http = _initHttp(); var _para = _makeParam(param); _http.open("POST", url, true); _http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); _http.onreadystatechange = function () { if (_http.readyState == 4 && _http.status == 200) { handler(_http.responseText); } }; _http.send(_para); }, /* 跨域请求:jsonp * ajax和jsonp其实本质上是不同的东西。 * ajax的核心是通过XmlHttpRequest获取非本页内容,而jsonp的核心则是动态添加<script>标签来调用服务器提供的js脚本。 * ajax与jsonp的区别不在于是否跨域,ajax通过服务端代理一样可以实现跨域,jsonp本身也不排斥同域的数据的获取 * 总而言之,jsonp不是ajax的一个特例,哪怕jquery等巨头把jsonp封装进了ajax,也不能改变着一点! * 参考: http://www.cnblogs.com/dowinning/archive/2012/04/19/json-jsonp-jquery.html */ crossDomain: function (url, handler) { // _handler要声明为全局变量,否则会找不到对象 _handler = function (data) { handler(data); }; var _url = url; if (_url.indexOf('?') > -1) { _url += '&callback=_handler'; } else { _url += '?callback=_handler'; } var script = document.createElement('script'); script.setAttribute('src', _url); document.getElementsByTagName('head')[0].appendChild(script); } } // post参数 function _makeParam(param) { var _para = ''; if (param) { for (var key in param) { _para += key + '=' + param[key] + '&'; } } return _para; }
javascript的封装真的不会,随便参考了一下大牛们的代码,姑且能用!
使用方法:
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> <!--引入脚本文件--> <script src="../js/C-AsyncHttp.js" type="text/javascript"></script> <script type="text/javascript"> function getData() { var crossDomainUrl = 'http://localhost:22650/default.aspx'; // 跨域请求数据 CM.crossDomain(crossDomainUrl, function (data) { // TODO:跨域请求成功之后的数据处理 }); // Tip:参数要求为json格式 var para = { name: "abc", age: "18" }; var url = '../Server/server.ashx'; // Get请求 CM.get(url, para, function (data) { // TODO:ajax请求成功之后的数据处理 }); // Post请求 CM.post(url, para, function (data) { // TODO:ajax请求成功之后的数据处理 }); } var handler = function (data) { alert(data.name); }; </script> </head> <body> <input type="button" id="btnSend" value="Send" onclick="getData();" /> </body> </html>