Ajax是Asynchronous JavaScript and XML的缩写。Asynchronous,是任务的一种执行模式,程序的执行顺序与任务的排列顺序是不一致的、异步的。JavaScript,是程序的核心,用来进行交互以及通讯的控制与实现。XML,是进行交互以及通讯的数据格式,目前一般采用JSON的格式。html
传统web应用,每次用户的交互都须要向服务器发送请求,服务器接收并处理请求以后,返回新的页面给客户端浏览器,在此期间用户必须等待页面从新绘制完成。jquery
使用Ajax,用户的交互交给JavaScript来处理而不是直接发送给服务器,此时页面不进行刷新,在此期间用户能够继续进行页面交互。当服务器将数据返回给JavaScript时,能够局部更新页面,从而用户在页面没有提交或刷新就获得新的数据。web
经过这种异步模式,使web应用程序像桌面应用程序同样,可以及时响应用户与服务器之间的交互,没必要进行页面刷新或跳转,缩短等待时间,减轻服务器的负载。ajax
XMLHttpRequest对象是Ajax技术的核心,在IE 5中首次引入,是一种支持异步请求的技术。经过该对象,可使用JavaScript向服务器提出请求并处理响应,而不阻塞用户的其余操做。json
使用XMLHttpRequest对象向服务器发送请求和处理响应以前,必须先建立一个XMLHttpRequest对象。在不一样的浏览器中,建立XMLHttpRequest对象的建立方式也不相同,因此须要对浏览器进行判断。跨域
var xhr = new XMLHttpRequest();
或数组
var xhr = new ActiveXObject("Microsoft.XMLHTTP");
后者支持IE 5和IE 6。浏览器
从表单获取数据:缓存
var city = document.getElementById("city").value;
创建要链接的URL:安全
var url = "/pages/getCity.html?city=" + escape(city)
打开服务器链接:
xhr.open("GET", url, true);
最后一个参数设为true,表示请求一个异步链接;若是设为false,表示发送请求后将等待服务器返回的响应。
设置链接以后服务器要进行的处理:
xhr.onreadystatechange = updatePage;
属性onreadystatechange告诉服务器处理完请求以后,执行哪些操做。
发送请求:
xhr.send();
判断响应是否处于就绪状态:
if (xhr.readyState === 4 && xhr.status === 200)
得到服务器的响应:
var response = xhr.responseText;
设置表单数据:
document.getElementById("zipCode").value = response;
老版本的XMLHttpRequest对象存在不少缺点:
新版本针对老版本的缺点,作出很大改进:
设置最长等待时间,超过这个时限,会自动中止HTTP请求:
xhr.timeout = 3000;
为了方便表单处理,新增FormData对象,能够模拟表单:
var formData = new FormData(); formData.append('username', 'sean'); formData.append('age', 20); xhr.send(formData);
要上传的文件是表单元素,因此能够将它放到FormData对象中,实现文件上传:
for (var i=0; i\<files.length; i++) { formData.append('files[]', files[i]); }
利用新增的responseType属性,指定服务器返回的数据类型,默认是text文本类型。若是设置为blob,表示服务器返回的是二进制对象。
xhr.responseType = 'blob';
还能够设置为arraybuffer,把二进制数据放在一个数组里:
xhr.responseType = "arraybuffer";
传送数据时,使用progress事件,返回进度信息。它分上传和下载两种状况:下载属于XMLHttpRequest对象,上传属于XMLHttpRequest.upload对象。
定义progress事件的回调函数:
xhr.onprogress = updateProgress; xhr.upload.onprogress = updateProgress;
在回调函数中,处理事件:
function updateProgress(event) { if (event.lengthComputable) { var percentComplete = event.loaded / event.total; } }
与progress事件相关的其余事件:
向不一样域名的服务器发送HTTP请求,叫作跨域资源共享,简称CORS。前提是浏览器必须支持该功能,而且服务器端必须赞成进行跨域。
xhr.open('GET', 'http://www.google.com/');
能够远程载入HTML,并插入到DOM中。经常使用来从服务器上获取静态的数据文件。load方法的传递方式根据参数data来自动指定。若是没有参数,则采用GET方式,不然会采用POST方式。
参数说明:
使用GET方式进行异步请求。服务器的状态和应用的模型数据不受GET操做的影响。
参数说明:
使用POST方式进行异步请求。发送到服务器的数据能够用来修改应用的模型数据。
get和post方式的区别:
用来加载js文件,js文件会自动执行。
用来加载JSON文件。
是jQuery最底层的实现。参数包含了所须要的请求设置以及回调函数,以key/value形式存在。
选项:
参考资料: