即 Asynchronous [e'sɪŋkrənəs] Javascript And XML,AJAX 不是一门的新的语言,而是对现有技术的综合利用。
本质是在HTTP协议的基础上以异步的方式与服务器进行通信。XMLHttpRequest可以以异步方式的处理程序,浏览器内建对象,用于在后台与服务器通信(交换数据) ,由此我们便可实现对网页的部分更新,而不是刷新整个页面。
封装ajax工具函数
$.ajax = function(options){
if(!options) return false;
/*options 参数传递*/
var type = options.type || 'get'; var url = options.url || location.pathname; var async = options.async === false ? false : true; var data = options.data || {};/*data 选要转化成 name=xjj&age=10*/
var dataStr = ''; for(var key in data){ //console.log(data[key]); dataStr += key+'='+data[key]+'&'; }/*如果就数据 就裁剪掉最后一个&*/
dataStr = dataStr && dataStr.slice(0,-1); /*ajax 编程*/ /*初始化*/ var xhr = new XMLHttpRequest();/*请求行*/
/*如果是get请求那么就要拼接数据在url后面 ?*/ xhr.open(type,type == 'get'?url+'?'+dataStr:url,async);/*请求头*/
/*如果是post请求需要设置 content-type application/x-www-form-urlencoded*/ if(type == 'post'){ xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); }options.beforeSend && options.beforeSend();
/*请求主体*/
/*如果是post请求需要把数据字符传过去 否则是null*/ xhr.send(type=='get'?null:dataStr);/*监听响应状态的改变*/
xhr.onreadystatechange = function(){ /*响应成功*/ if(xhr.readyState == 4){ if( xhr.status == 200){ /*处理响应成功函数*/ var result = ''; /*接受数据*/ /* json xml string*/ var contentType = xhr.getResponseHeader('Content-Type');if(contentType.indexOf('xml') > -1){
/*服务端返回的是xml数据格式*/ result = xhr.responseXML; }else if(contentType.indexOf('json') > -1){ /*服务端返回的是json数据格式*/ /*json字符串*/ var str = xhr.responseText; result = JSON.parse(str); }else{ result = xhr.responseText; }/*调用回调函数*/
options.success && options.success(result); } /*响应失败*/ else{ /*处理响应失败函数*/ options.error && options.error('request fail code' + xhr.status); }options.complete && options.complete();
} }};