关于Ajax
来源:互联网 发布:淘宝怎么做详情页 编辑:程序博客网 时间:2024/05/16 23:33
Ajax(Asynchronous Javascript And XML)是做一个请求,同时利用JS的一个内置对象XHR来实现,因此,Ajax和Jquery一样,并不是一门新的语言。只是通过Ajax,可以从服务器请求数据,将数据动态的渲染到页面上。说到服务器,在学习Ajax之前就要了解一下,服务器和客户端是什么。
服务器:互联网上的某台计算机。
客户端:浏览器
Ajax实现原理类似于:客户端向服务器发出请求(Request),服务器响应(Response)客户端的请求。其中,请求包括:1、请求行,2、请求头,3、请求主体;响应包括:1、状态行,若状态码为200,则表示请求已发送,2、响应头,3、响应主体。请求方式有两种:1、get方式,2、post方式,get方式为同源,post方式为跨域。什么又是同源?同源,协议、IP地址、端口号都相同即为同源,跨域即为非同源。出于安全考虑Ajax要求同源。
接下来看看什么是Ajax。
var xhr=new XMLHttpRequest();//实例化Ajaxxhr.open("get","url地址");//发起http请求xhr.send(null);//由于请求方式为get,因此请求主体为空xhr.onreadystatechange=function(){//接收服务器响应:if(xhr.readyState==4&&xhr.status==200){//readyState:准备状态,4为已准备完毕,status:状态,200为完毕成功console.log(xhr.responseText);//responseText:响应的结果}}
其中,XHMLHttpresquest具有兼容性,IE的写法为:var xhr=new ActiveXObject("Microsoft.XMLHTTP");
Ajax中的其他方法:
var xhr=new XMLResquest();xhr.open();//发起请求,get/postxhr.setResquestHeader();//设置请求头xhr.send();//发送请求主体xhr.onreadystatechange=function(){//xhr.readyState=0;//表示open未调用//xhr.readyState=1;//表示open已调用//xhr.readyState=2;//表示接收到头信息//xhr.readyState=3;//表示接收到响应主体//xhr.readyState=4;//表示响应完毕//xhr.getAllResponseHeaders();//表示获取所有响应头信息//xhr.getResponseHeader("...");//表示获取头信息的指定信息}
以上提到,Ajax中请求方式有两种,第一种为get请求,第二种为post请求,那么接下来看看get请求和post请求两者的区别。
1、post请求:
xhr.open("post","url地址");xhr.setRequestHeader("Content-type","application/x-www-form-urlencode");xhr.send("username=xx&&password=xx");//例子
2、get请求
xhr.open("get","url地址");xhr.send(null);
两者区别:
(1)post请求必须设置请求头:xhr.setRequestHeader(“Content-type”,”application/x-www-form-urlencode”);
(2)get请求没有请求主体
(3)get请求可通过在URL上添加参数
(4)post请求可通过xhr.send(“name=xx&&age=xx”);添加参数
(5)get请求效率更好,应用较多
(6)get请求限制大小,约4k,post请求没有限制
打开服务器方法:
var express=require("express");var date=require("./report.js");var app=express();app.use(express.static("./dist");app.get("/report",function(req,res){res.json(data);});app.listen(端口号,"IP地址");
打开服务器必须先有服务器express才可以这种方式打开服务器。
Ajax的数据渲染经常与模板引擎相配合使用。我学习的模板引擎为art-template,因此在这里就和大家看一看art-template模板引擎。
用法:
<div id="tpl"></div><script type="text/template" id="tpl"><ul><li>{{arr[0].name}}</li>//标准语法<li><%=arr[1].name%></li>//原始写法</script><script>var data={"arr":[{"name":"Mike"},{"name":"Sue"}]};var html=template("tpl",data);document.getElementsByTagName("div").innerHTML=html;</script>
if语句的模板引擎写法:
{{if arr[0].name=="xx" }}//条件1 <li>{{arr[0].name}}</li> {{else if 条件2}} ...... {{/if}}
循坏语句模板引擎:
{{each arr}}//arr为要遍历的数组<li>{{$value.name}}</li><li>{{下标:$index,值:{{$value.name}}</li>{{/each}}
Ajax的封装原理:
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title></title> </head> <body> <script type="text/javascript"> function Ajax(option){ var dataType=option.dataType||"jsonp";//请求类型:json为同源,jsonp为跨域 var type=option.type||"get";//请求方式,get/post var data=option.data||"";//请求的数据 if(!option.url){ console.error("url参数缺少"); return; } var url=option.url;//请求的地址 var dataStr=""; for(var key in data){ dataStr+=key+"="+data[key]+"&";//循环地址 } dataStr=dataStr.slice(0,-1);//将最后一位&去除 if(dataType=="json"){//判断传入的请求类型 if(XMLHttpRequest){//判断浏览器类型 var xhr=new XMLHttpRequest; }else{ var xhr=new ActiveXObject("Microsoft.XMLHTTP"); } if(type=="get"){//判断请求方式 xhr.open("get",url+"?"+dataStr); xhr.send(null); }else if(type=="post"){ xhr.open("post",url); xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded"); xhr.send(dataStr); } xhr.onreadystatechange=function(){ if(xhr.readyState==4&&xhr.status==200){ option.success(xhr.responseText); } } } if(dataType=="jsonp"){ var callback="ajax"+new Date().getTime().Math.random().toString().slice(2); window[callback].function(data){ option.success(data); document.body.removeChild(script); } var script=document.createElement("script"); if(dataStr==""){ script.src=url+"&callback"+callback; }else{ script.src=url+"?"+dataStr+"&callback="+callback; } document.body.appendChild(script); } } </script> </body></html>//调用方式//ajax({// "dataType":"jsonp",//请求类型:json为同源,jsonp为跨域// "type":"get",//请求方式:get/post// "url":"xxxxx",//IP地址// "success":function(data){//成功需要执行的代码块// // },// "data":{//相关数据// "format":2,// "cityname":"xxx";// "key":"xxx"// }// })
- 关于ajax
- 关于AJAX
- 关于AJAX
- 关于Ajax
- 关于ajax
- 关于AJAX
- 关于Ajax
- 关于Ajax
- 关于ajax
- 关于ajax
- 关于ajax
- 关于AJAX
- 关于ajax
- 关于ajax
- 关于ajax
- 关于ajax
- 关于Ajax
- 关于Ajax
- Codeblocks使用问题汇总
- instanceof
- Python __init__.py 模板
- 突破百度网盘下载限制(大文件直接下载、使用迅雷下载)
- binary-tree-maximum-path-sum
- 关于Ajax
- oracle索引操作等
- 【LibUIDK界面库系列文章】自绘List control的滚动条
- 看盘时这几个点需要特别留意
- Basic Tree--Data Structure
- JSON 之 SuperObject(14): 从 XML 中解析
- 数据结构 第8讲 KMP算法
- android Handler使用
- 51 nod 加号分配 组合数学(逆元,快速幂)