封装ajax:
ajax.js:
/*
参数1: type 请求的方式 get post 默认为get
参数2: url 请求的地址 没有默认值
参数3: data 请求的数据 默认为 ''
参数4: success 要求: success的是一个函数
参数5: error error表示调用结构失败了
参数6: dataType 表示响应的数据格式 text/json/xml 默认 text
*/
function ajax(options) {
// 如果options没有传,或者options传的不是对象类型 不发送请求
if (!options || typeof options !== 'object') {
return
}
// 处理url 如果url没有传递,不发送请求
var url = options.url
if (!url) {
return
}
// 处理type, 默认type为get
var type = options.type || 'get'
// 处理data
var data = options.data || null
if (data && typeof data === 'object') {
// {username: "111", password: "222"}
// username=111&password=222
// 把data对象变成字符串
var arr = []
for (var k in data) {
arr.push(k + '=' + data[k])
}
data = arr.join('&')
}
var dataType = options.dataType || 'text'
// 创建ajax对象
var xhr = new XMLHttpRequest()
// 设置请求行
// 如果get请求,url需要拼接data
if (type === 'get' && data) {
// 对data进行处理
url = url + '?' + data
data = null
}
xhr.open(type, url)
// 处理请求头
if (type === 'post') {
xhr.setRequestHeader('content-type', 'application/x-www-form-urlencoded')
}
// 处理请求
xhr.send(data)
// 处理响应
xhr.onreadystatechange = function() {
if (xhr.readyState === 4) {
if (xhr.status === 200) {
// 如果传递了success 就调用
if (dataType === 'xml') {
result = xhr.responseXML
} else if (dataType === 'json') {
result = JSON.parse(xhr.responseText)
} else {
result = xhr.responseText
}
options.success && options.success(result)
} else {
// 如果传递error,就调用
options.error && options.error()
}
}
}
}
使用封装的ajax.js文件
登录功能:
前端代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>Document</title>
</head>
<body>
<input type="text" class="username" />
<input type="text" class="password" />
<button>登录</button>
// 引入自己封装的ajax.js文件
<script src="ajax.js"></script>
<script>
var button = document.querySelector('button')
var username = document.querySelector('.username')
var password = document.querySelector('.password')
button.onclick = function() {
ajax({
type: 'post',
url: '11.php',
// data name=zs&age=18
data: {
username: username.value,
password: password.value
},
success: function(info) {
console.log(info)
},
error: function() {
alert('服务器繁忙')
}
})
}
// jquery的ajax
</script>
</body>
</html>
后台php代码(11.php):
<?php
if ($_POST['username'] === 'admin' && $_POST['password'] === '123456') {
echo 'success';
} else {
echo 'fail';
}
?>
虽然可以使用自己封装的ajax,但是如果要使用ajax技术,还是建议直接使用jquery封装的ajax方法($.ajax());