一、Ajax简介
概念
Ajax (阿贾克斯 Asynchronous Javascript And Xml ) 异步JavaScript和XML,是指一种创建交互式网页应用的网页开发技术, 可以访问服务器数据的局部刷新的技术. AJAX不是一种新的编程语言。Ajax作用
允许客户端发送HTTP请求, 去异步请求服务器的数据来创建动态网页。
异步获取数据,即是数据交互(通过ajax获取某一文本文件的内容)。Ajax核心
Ajax 技术核心是JavaScript对象XMLHttpRequest(简称XHR)。使用的场景
a.在百度中进行关键字搜索,会提示相关的所有内容
b.在账号注册的时候,其中某一项会直接提示错误
二、Ajax操作
- 创建对象XMLHttpRequest()
- open()方法
- send()
- request.onreadystatechange = function(){}
// 1、打开浏览器
// 创建一个ajax对象 ( ie6以下new ActiveXObject(‘Microsoft.XMLHTTP’) )
var request = null;
if (window.XMLHttpRequest) {
request = new XMLHttpRequest();
} else {
request = new ActiveXObject('Microsoft.XMLHTTP');
}
// 2、在地址栏输入地址
/*open方法
参数一: 打开方法 get/post
参数二: 请求地址
参数三: 是否异步 (true异步: 非阻塞 / false同步: 阻塞)
*/
request.open('get', '00-test.txt', true);
// 3、提交请求(回车)
request.send();
// 4、等待服务器返回内容
/**
responseText: ajax请求返回的数据即存放在该属性下(都为字符串):
readyState属性: 请求状态
0: (初始化)还没有调用open()方法
1: (载入)已调用send()方法,正在放请求
2: (载入完成)send()方法完成,已收到全部响应内容
3: (解析)正在解析响应
4: (完成)响应内容解析完成,可以在客户端调用
on readystate change: 当readyState改变的时触发
status: 服务器状态,http状态码
1字开头: 消息类
2字开头: 成功类
3字开头: 重定向类
4字开头: 请求错误类
5字开头: 服务器错误类
*/
request.onreadystatechange = function(){
if(request.readyState == 4){
if(request.status == 200){
// 请求到数据,显示
var oP = document.createElement('p');
document.body.appendChild(oP);
oP.innerHTML = request.responseText;
} else {
alert('错误了');
}
}
}
三、同步、异步
- 同步:小店吃饭,小店老板厨师都是一个人
程序中:如果程序在下载数据,UI界面就无法响应;
- 异步:饭堂吃饭,收银台,打饭的,厨师,各自互不影响
程序中:异步下载数据和UI界面两个线程;
四、HTTP协议
HTTP协议:
HTTP是一个属于应用层的面向对象的网络协议, 由于其简捷,快速的方式, 适用于分布式超媒体信息系统。
HTTP协议的主要特点有: Client/Server模式, Brower/Server模式
1, 支持客户端/服务端模式. 即请求(request)-响应(response)模式, 必须先请求才能得到响应, 服务器不能通过http协议直接发送数据给客户端
2, 简单快速, 客户端向服务端发送请求时, 只需要传送请求方式和路径即可,所以简单, 由于HTTP协议简单, 使得HTTP服务器的程序规模小, 因而速度很快;
3, 灵活, 传输数据类型种类多
4, 无连接, 请求一次服务器后立刻断开连接, 即非长连接 即短连接
5, 无状态, HTTP协议对事务处理没有记忆能力; 【会话技术cookie、session】
HTTP协议的请求方式: get/post/options/head/put/delete/trace/connect/patch,但通常都是get和post,即常说的使用http的get或post请求。
HTTP包含: 请求头和请求体
- GET请求
在Ajax使用的过程中,GET的使用频率又要比POST高得多. GET请求最常用于向服务器获取数据, 也可以将少量字符串参数提交给服务器。
get请求:在请求URL后面以 ? 的形式跟上发给服务器的参数,多个参数之间用&隔开。
get请求地址:
http://193.112.122.210/study/login_get.php
参数说明:
user 用户名
password 密码
例如:
http://193.112.122.210/study/login_get.php?user=qingbuyaodianwo&password=123321
注:由于浏览器和服务器对URL长度有限制,因此在URL后面附带的参数是有限制的,通常不能通常不能超过1KB
- POST请求
POST请求可以包含非常多的数据, 我们在使用表单提交的时候, 很多就是使用的POST传输方式。发给服务器的参数全部放在请求体(URL中看不到)中。
POST请求向服务器发送的数据, 不会跟在URL后面, 而是通过send()方法向服务器提交数据。
xhr.send('user =Zhang& password=123321');
POST请求和Web表单提交不同, 需要使用XHR来模仿表单提交
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
post请求地址:
http://193.112.122.210/study/login_post.php
参数说明:
user 用户名
password 密码
var request = null;
try{
request = new XMLHttpRequest();
} catch(e) {
request = new ActiveXObject('Microsoft.XMLHTTP');
}
request.open('post', ' http://193.112.122.210/study/login_post.php', true);
// 请求头,传输的数据类型(post默认是没有设置的)
request.setRequestHeader('content-type','application/x-www-form-urlencoded');
// 请求参数
request.send('user=EndEvent& password=123321');
request.onreadystatechange = function(){
if(request.readyState == 4){
if(request.status == 200){
alert(request.responseText);
} else {
alert('获取数据失败');
}
}
};
注: post传递的数据量没有显示,这具体还得看服务器的处理能力。
注: 从性能上来讲POST请求比GET请求消耗更多一些, 用相同数据比较, GET比 POST快. 这也是我们GET请求的使用率大于POST的原因。
五、JOSN数据解析
JSON.parse()将一个符合JSON语法的字符串解析成一个对应类型的值或对象。
// 转为JSON对象
var dataSource = JSON.parse(request.responseText);
例如:
http://193.112.122.210/json/JSON1.json
在线解析:
http://json.cn
http://tool.oschina.net/codeformat/json
六、jQuery-Ajax
- $.ajax()
执行一个异步的HTTP(Ajax)的请求。
/*
* 文档注释
* type: HTTP的请求方式(get或post), 默认是get
* url: 接口, 必需
* data: 参数(需要提交给服务器的数据)
* async: 是否异步, 默认是true
* success: 表示请求成功之后的响应
* error: 表示请求失败之后的响应
*/
$(document).on('click', function(){
$.ajax({
type:"get",
url:"http://193.112.122.210/study/login_get.php",
data: {'user':'qingbuyaodianwo', 'password':'123321'},
async:true,
success: function(data){
console.log(data)
},
error: function(err){
console.log(err)
}
});
})
- $.get()
使用一个HTTP GET请求从服务器加载数据。
语法:
jQuery.get( url [, data ] [, success(data, textStatus, jqXHR) ] [, dataType ] )
url: 请求地址
data: 发送给服务器的字符串或Key/value键值对
success(data, textStatus, jqXHR): 当请求成功后执行的回调函数
dataType: 从服务器返回的预期的数据类型。默认:智能判断(xml, json, script, or html)
$.get("http://193.112.122.210/json/JSON2.json", function(data){
// console.log(data)
var arr = JSON.parse(data)
})
注: http://193.112.122.210/json/JSON1.json
注: http://193.112.122.210/json/JSON2.json
注: 带参数时,可以拼接到url后面,也可以设置data对象。
jQuery中封装的get请求快捷方式。
- $.post()
使用一个HTTP POST 请求从服务器加载数据。
语法:
jQuery.post( url [, data ] [, success(data, textStatus, jqXHR) ] [, dataType ] )
url: 请求地址
data: 发送给服务器的字符串或Key/value键值对
success(data, textStatus, jqXHR): 当请求成功后执行的回调函数
dataType: 从服务器返回的预期的数据类型。默认:智能判断(xml, json, script, or html)
$.post("http://193.112.122.210/study/login_post.php", {"user":"zhangsan","password":"123321"}, function(data){
//console.log(data)
console.log("post")
})
jQuery中封装的post请求快捷方式。
七、实际案例
- 蘑菇街商品列表效果
默认第1页: http://193.112.122.210/study/getData.php
带参数page页码: http://193.112.122.210/study/getData.php?page=1
带参数page页码: http://193.112.122.210/study/getData.php?page=2
操作步骤:
1、基本HTML(模拟页面显示)
2、添加CSS样式
3、通过ajax动态获取数据
4、JSON数据解析
5、DOM操作(渲染到页面中)