-
HTML代码
b.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="d.js"></script>
<!-- 括号里的ev,ev1,是event事件对象,所有的鼠标移动,键盘点击的详细状况都保存在这个形参里面-->
<script>
window.onload=function(ev){
var oBtn=document.querySelector("button");
//在你的发送请求中,不能出现中文 如何解决这个问题呢 处理参数中,需要将中文转换 比如 "wd=张三" 转换成wd=%E5%BC%AO%E4%B8%89这种类型
var res=encodeURIComponent("张三");//js中的方法
console.log(res);
oBtn.onclick=function(ev1){
//用ajax提交get请求,get请求会把参数放在url后面
//url?key=value&&key=value;
Ajax("a.php",{
"userName":"lnj",
"userPwd":"123456"//要把这种对象转换为服务器所需要的的格式
},3000//设置超时 如果超过3秒,则会终止此次请求
,function (xhr){/*地址,请求成功要执行的的回调函数,请求失败的回调函数 括号里是异步对象*/
alert(xhr.responseText);
},function(xhr){
alert("请求失败");
})
}
}
</script>
</head>
<body>
<button>发送请求</button>
</body>
</html>
-
js代码
d.js
function objtostr(obj){
/*
"userName":"lnj",
"userPwd":"123456"
"t":"16461231654"
*/
obj.t=new Date().getTime();
var res=[];
for(var key in obj){
//在url中是不可以出现中文的,如果出现了中文需要转码
//可以调用encodeURIComponent方法
//URL中只可以出现字母/数字/下划线/ASCII码
res.push(encodeURIComponent(key)+"="+encodeURIComponent(obj[key]));//[userName=lnj,userPwd=123456];
}
return res.join("&");//join方法把数组转换成字符串 ,并且元素与元素之间用&连接 userName=lnj&&userPwd=123456
}
function Ajax(url,obj,timeout,success,error){
//0.将对象转换为字符串
var str=objtostr(obj);
/*三个会变的作为参数 地址,成功要执行的回调函数,失败的函数*/
//兼容IE
//1.创建一个异步对象
var xmlhttp,timer;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
//2.设置请求方式和请求地址(给创建的异步对象设置)
/*
method:请求的类型:GET或POST
url:文件在服务器上的位置
async:true(异步)或false(同步) AJAX是异步请求,所以括号里永远填true
*/
xmlhttp.open("GET",url+"?"+str,true)
//3.发送请求 异步对0象发送请求
xmlhttp.send();
//4.监听状态的变化 监听的是异步对象的变化 只要异步请求发生了变化,就调用这个回调函数,代表请求已经完成
xmlhttp.onreadystatechange=function(ev2){
if(xmlhttp.readyState===4){
clearInterval(timer);//接收到了响应,把定时器关掉
/*
存有 XMLHttpRequest 的状态。从 0 到 4 发生变化。
0: 请求未初始化
1: 服务器连接已建立
2: 请求已接收
3: 请求处理中
4: 请求已完成,且响应已就绪
*/
//判断是否请求成功 http状态码
if(xmlhttp.status>=200&&xmlhttp.status<300||
xmlhttp.status===304){
//5.处理返回的结果
/*
服务器响应
responseText获得字符串形式的响应数据
responseXML 获得XML形式的响应数据
*/
success(xmlhttp);
}else{
error(xmlhttp);
}
}
}
//判断外界是否传入了超时时间
if(timeout){
timer=setInterval(function(){
console.log("中断请求");
xmlhttp.abort();//中断请求
clearInterval(timer);
},timeout);
}
}
-
php代码
a.php
<?php
sleep(5);//当执行到php文件这段代码的时候,就会在这个地方停留五秒 为了验证超时设置是否有效
echo $_GET["userName"];
echo "<br>";
echo $_GET["userPwd"];