AJAX不是一门新的语言,而是对现有技术的综合利用,本质是在HTTP协议的基础上以异步的方式与服务器进行通信。(实现局部刷新功能)。
🇨🇳XMLHttpRequest:(浏览器内建对象,用于在后台与服务器通信,由此可以实现网页的局部刷新,而不是整体刷新)
用法:
//创建XMLHttpRequest实例
var request = new XMLHttpRequest();
========================================================
//设置请求行(请求方式和请求服务器地址,默认为true表示异步)
request.open("POST", "server.php?, true);
//GET方式的话参数跟在请求地址后边
request.open("GET", "server.php?number=" + document.getElementById("keyword").value, true);
========================================================
//设置请求头,get方法一般不需要设置
request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
========================================================
//设置请求主体(POST需要填写,GET方法一般不写或写为request.send(null);)
request.send("username=admin&pass=123");
========================================================
//接收服务器响应(有0,1,2,3,4共五个状态,request.readyState分别等于以下状态码时,
//0的时候请求未初始化,open未调用
//1的时候open已调用,与服务器建立连接
//2的时候请求已接收,HEADERS_RECEIVED接收到头消息
//3的时候请求处理中LOADING接收到响应主体
//4的时候请求已完成,DONE响应完成)
//监听状态码的方法
request.onreadystatechange = function() {
//获取响应信息
request.statusText;
//获取响应码,如200
request.status;
//获取全部响应头信息
request.getAllResponseHeaders();
//获取指定头信息
request.getResponseHeader("key");
//表示响应主体
request.responseText, request.responseXML
if(request.readyState==4) {
if(request.status==200) {
//console.log("响应完成并且成功响应");
var result=request.responseText;
document.getElementById("id").innerHTML=result;
} else {
console.log("请求失败");
}
}
🇨🇳例:
原生AJAX
<script>
document.getElementById("search").onclick = function() {
var request = new XMLHttpRequest();
request.open("GET", "server.php?number=" + document.getElementById("keyword").value);
request.send();
request.onreadystatechange = function() {
//if(request.readyState==4 && request.status==200)
if (request.readyState==4) {
if (request.status==200) {
document.getElementById("searchResult").innerHTML = request.responseText;
} else {
alert("发生错误:" + request.status);
}
}
}
}
document.getElementById("save").onclick = function() {
var request = new XMLHttpRequest();
request.open("POST", "server.php");
//构造参数
var data = "name=" + document.getElementById("staffName").value
+ "&number=" + document.getElementById("staffNumber").value
+ "&sex=" + document.getElementById("staffSex").value
+ "&job=" + document.getElementById("staffJob").value;
request.setRequestHeader("Content-type","application/x-www-form-urlencoded");
request.send(data);
request.onreadystatechange = function() {
if (request.readyState==4) {
if (request.status==200) {
document.getElementById("createResult").innerHTML = request.responseText;
} else {
alert("发生错误:" + request.status);
}
}
}
}
</script>
🇨🇳例:
JQuery中的AJAX(传JSON格式的对象)
//引入JQuery
<script src="http://apps.bdimg.com/libs/jquery/1.11.1/jquery.js"></script>
<script>
//JQuery初始化,此方法可以出现多次
$(document).ready(function(){
$("#search").click(function(){
$.ajax({
type: "GET",
url: "http://127.0.0.1:8000/ajaxdemo/serverjsonp.php?number=" + $("#keyword").val(),
//跨域会用到jsonp,若不跨域,请定义dataType:"json"
dataType: "jsonp",
//跨域会用到jsonp,若不跨域,不需要定义jsonp,callback可以为任意,但需要与后端保持一致
jsonp: "callback",
success: function(data) {
if (data.success) {
$("#searchResult").html(data.msg);
} else {
$("#searchResult").html("出现错误:" + data.msg);
}
},
error: function(jqXHR){
alert("发生错误:" + jqXHR.status);
},
});
});
$("#save").click(function(){
$.ajax({
type: "POST",
url: "http://127.0.0.1:8000/ajaxdemo/serverjsonp.php",
data: {
name: $("#staffName").val(),
number: $("#staffNumber").val(),
sex: $("#staffSex").val(),
job: $("#staffJob").val()
},
dataType: "json",
success: function(data){
if (data.success) {
$("#createResult").html(data.msg);
} else {
$("#createResult").html("出现错误:" + data.msg);
}
},
error: function(jqXHR){
alert("发生错误:" + jqXHR.status);
},
});
});
});
</script>
🇨🇳例子中的html表单模板
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Demo</title>
<style>
body, input, select, button, h1 {
font-size: 28px;
line-height:1.7;
text-align:center;
}
</style>
</head>
<body>
<h1>员工查询</h1>
<label>请输入员工编号:</label>
<input type="text" id="keyword" />
<button id="search">查询</button>
<p id="searchResult"></p>
<h1>员工新建</h1>
<label>请输入员工姓名:</label>
<input type="text" id="staffName" /><br>
<label>请输入员工编号:</label>
<input type="text" id="staffNumber" /><br>
<label>请选择员工性别:</label>
<select id="staffSex">
<option>女</option>
<option>男</option>
</select><br>
<label>请输入员工职位:</label>
<input type="text" id="staffJob" /><br>
<button id="save">保存</button>
<p id="createResult"></p>