深入解析AJAX的原理

AJAX:Asynchronous JavaScript And Xml(异步的JS和XML)

同步:客户端发起请求》服务端的处理和响应》客户端重新载入页面(循环)

异步:客户端实时请求》服务端处理和响应》客户端获得响应后局部刷新页面

异步实现的关键是,XMLHttpRequest对象的出现

创建XHR对象

var request;
if(window.XMLHttpRequest){
     request = new XMLHttpRequest(); //IE7+,Firefox,Chrome,Opera,Safari
}else{
     request = new ActiveXObject("Microsoft.XMLHTTP");//IE6,IE5 
}

HTTP请求:无状态协议(不建立持久链接,服务器不保留记录是没有记忆),它的过程如下7步:

1、建立TCP连接

2、浏览器向服务器发送请求命令

3、浏览器发送请求头信息

4、服务器应答

5、服务器发送应答头信息

6、服务器想浏览器发送数据

7、服务器关闭TCP连接

HTTP请求的组成:请求的方法(get或post等);请求的URL;请求头(环境信息,身份验证);请求体。

HTTP响应的组成:状态码(200,304等);响应头(服务器时间,其他信息);响应体。

XHR对象的方法

open(method,url,async)//async同步还是异步,默认异步为true

send(string)

监听请求的响应是否成功

var request = new XMLHttpRequest();
request.open("GET","get.php",true);
request.send();
request.onreadystatechange=function(){
    if(request.readyState===4 && request.status===200){
        request.responseText//取得响应体内容
    }      
}

用post提交表单时,需要在open和send中间添加一个设置

request.setRequesrHeader("Content-Type","application/x-www-form-rulencoded");

json解析两种方法:

var jsonData='{"staff":[{"name":"洪七公","age":70},{"name":"郭靖","age":35}]}'
var jsonObj=eval('('+jsonData+')');//容易产生错误,不会校验json是否合法,会直接执行json中的js语句
var jsonObj=JSON.parse(jsonData);//推荐

Jquery中的$.ajax([settings])

type:类型,“POST”或“GET”,默认“GET”

url:发送请求的地址

data:是一个对象,连同请求发送到服务器的数据

dataType:预期服务器返回的数据类型,一般为json,若不指定jquery将根据http包mime信息智能判断

success:方法,请求成功的回调函数,传入返回的数据及包含成功代码的字符串

error:方法,请求失败的回调函数,传入XMLHttpRequest对象

$.ajax({
   type:"GET",
   url:"sever.php?number"+$("#keyword").val(),
   dataType:"json",
   success:function(data){
        if(data.success){alert(data.msg)}
    },
    error:function(err){
        alert("错误状态码:"+err.status)
    }
})    

跨域

当协议、子域名、主域名、端口号中任意一个不相同时,都算作不同域。

方法一:后端代理

方法二:JSONP(支持get,不支持post)

<!--在www.aaa.com页面中-->
<script>
function jsonp(json){
    alert(json["name"])
}
</script>
<script scr="http://www.bbb.com/jsonp.js"></script>
<!--在www.bbb.com页面中-->
jsonp({'name':"洪七公","age":70})

 方法三:HTML5提供的XHR2(ie10以下版本不支持)

服务端增加如下(PHP)

header("Access-Control-Allow-Origin:*")
header("Access-Control-Allow-Methods:POST,GET")

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏kwcode

Ajax jsonp 跨域请求实例

跨域请求 JSONP的缺点则是:它只支持GET请求而不支持POST等其它类型的HTTP请求;它只支持跨域HTTP请求这种情况,不能解决不同域的两个页面之间如何进...

35410
来自专栏木子墨的前端日常

关于options请求的一点理解

最近最项目改造,对所有的ajax请求统一做了一点处理,发现原来很正经的ajax请求突然不正常了,每个ajax之前都多了一个相应的method为options的请...

622
来自专栏前端知识分享

第110天:Ajax原生js封装函数

712
来自专栏java一日一条

四种常见的 POST 提交数据方式

我们知道,HTTP 协议是以 ASCII 码传输,建立在 TCP/IP 协议之上的应用层规范。规范把 HTTP 请求分为三个部分:状态行、请求头、消息主体。类似...

501
来自专栏前端架构

WebSocket的JavaScript例子

在HTML5规范中,我最喜欢的Web技术就是正迅速变得流行的WebSocket API。WebSocket提供了一个受欢迎的技术,以替代我们过去几年一直在用的A...

972
来自专栏ChaMd5安全团队

关于JSON CSRF的一些思考

关于JSON CSRF的一些思考 From ChaMd5安全团队核心成员 Maple CSRF作为常见漏洞,一直受到关注和研究,JSON是一种应用广泛的轻量级数...

3499
来自专栏web前端-

AJAX

 AJAX是异步的JavaScript和XML,是一种用于创建快速动态网页的技术,使用AJAX可以更新部分网页内容,是非常方便使用的

694
来自专栏Golang语言社区

【Go 语言社区】一个WebSocket的简单Echo例子

一个WebSocket的简单Echo例子:例子代码来自:http://www.websocket.org/echo.html 使用一个文本编辑器,把下面代码复制...

2697
来自专栏Danny的专栏

java过滤器——filter的使用和配置

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/...

672
来自专栏用户画像

Ajax GET请求后台数据

1、前台ftl文件,通过URL请求后台数据,返回数据(Json格式)封装在data中

593

扫描关注云+社区