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")

深入解析AJAX的原理的更多相关文章

  1. ajax的原理解析

    一.关于同步与异步的分析: 异步传输是面向字符的传输,它的单位是字符:而同步传输是面向比特的传输,它的单位是桢,它传输的时候要求接受方和发送方的时钟是保持一致的.而ajax就是采用的异步请求方式的. ...

  2. ajax请求原理及jquery $.ajax封装全解析

    .ajax原理: Ajax的原理简单来说通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据,然后用javascript来操作DOM而更新页面.这其中最关键的一步就是从服务器获得 ...

  3. ajax工作原理及jsonp跨域详解

    一.Ajax简介 ajax = 异步 JavaScript 和 XML. ajax是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术.我们知道,传统的网页(不使用ajax)如果需要更新内容, ...

  4. 理解AJAX的原理

    1.原生ajax异步请求(ajax的原理) (异步请求:无跳转,无刷新....)通过XMLHttpRequst对象,向服务器发送请求.XMLHttpRequest对象具有一些属性和方法. 1.首先创建 ...

  5. ajax的原理及使用

    ajax并非是一门新的技术,而是现有技术的一种新的组合用法,即是结合异步javascript和XML,它是一种创建快速动态网页的技术.其中,异步javascript是相对于同步而言的,同步模式通常称为 ...

  6. ajax工作原理/实例

    ajax是什么? 是一种创建交互式网页应用的一种网页技术.简单来说,就是向服务器发起请求,获得数据使交互性和用户体验更好. ajax不是一种新的技术,是一些技术的集合体.有 1.XHTML和CSS 2 ...

  7. AJAX异步原理与实现

    面试时问到了这个问题,说实话我还是不理解的,只是单单会使用.所以今天我看一下,自己了解下. 看了网上前辈们写的资料,我自己总结归纳ajax的原理和流程如下: 1.AJAX创建异步对象XMLHttpRe ...

  8. Ajax工作原理

    在写这篇文章之前,曾经写过一篇关于AJAX技术的随笔,不过涉及到的方面很窄,对AJAX技术的背景.原理.优缺点等各个方面都很少涉及null.这次写这篇文章的背景是因为公司需要对内部程序员做一个培训.项 ...

  9. jQuery解析AJAX返回的html数据时碰到的问题与解决

    $.ajax({ type : "post", url : "<%=request.getContextPath()%>/ce/articledetail/m ...

随机推荐

  1. Hadoop InputFormat详解

    InputFormat是MapReduce编程模型包括5个可编程组件之一,其余4个是Mapper.Partitioner.Reducer和OutputFormat. 新版Hadoop InputFor ...

  2. Jenkins~通过WebDeploy实现自动部署

    Jenkins以之前的文章中已经有所介绍,主要集成了自动化部署的功能,而对于自动化部署来说是由多个组件组成的,每个组件负责自己的事,如今天说的webDeploy,它主要实现将网站文件动态发布到另一台I ...

  3. Spring事务管理的注解方式

    使用注解实现Spring的声明式事务管理,更加简单! 步骤: 1) 必须引入Aop相关的jar文件 2) bean.xml中指定注解方式实现声明式事务管理以及应用的事务管理器类 3)在需要添加事务控制 ...

  4. 提高PHP编程效率的20个要点

    用单引号代替双引号来包含字符串,这样做会更快一些.因为PHP会在双引号包围的字符串中搜寻变量,单引号则 不会,注意:只有echo能这么做,它是一种可以把多个字符串当作参数的“函数”(译注:PHP手册中 ...

  5. jquery中的$(document).ready()

    window.onload = function(){ alert("welcome"); } 这样的写法作用是希望在页面加载完,自动执行定义js代码(function). $(d ...

  6. 玩转Docker之常用API(四)

    原文地址:http://accjiyun.cn/wan-zhuan-dockerzhi-chang-yong-api-si/ 任何一个开发的平台都会向开发者开发API,以供开发者更加自由地使用平台所提 ...

  7. [转] eclipce使用vim 开启装逼模式

    原文:http://blog.csdn.net/fatal360/article/details/12321613 1.在eclipse中使用vi模式的插件Vrapper打开eclipse,在Help ...

  8. 开发Maven插件

    Mojo: Maven plain Old Java Object 1.插件命名规则:maven-<yourplugin>-plugin是Maven的保留字段,不允许使用,我们可以用< ...

  9. pat乙级1052

    输出“\”字符: cout << "\\"; 因为‘\’是转义字符,例如“\n”代表换行. 同理,printf输出“%”: printf("%%") ...

  10. 打造颠覆你想象中的高性能,轻量级的webform框架-----如何替换webform的垃圾控件(第一天)

    前文描述: 随着.net  推出 MVC框架以来,webform 与 mvc 的争论一直没有停止过,一直以来 mvc 的 拥护者远远高于 webform,但是webfrom的有些优势又是mvc而无法替 ...