ajax 全名: async javascript and xmljavascript
ajax 的请求要素:css
var xhr = null
if (window.XMLHttpRequest) {
xhr = new XMLHttpRequest() //经常使用浏览器自带
} else {
xhr = new ActiveXObject("Microsoft.XMLHttp") //IE6自带
}
xhr.open("get", "http://www.baidu.com", true) // 第三个参数 true 表明异步
xhr.send() //这就能够发送了 但有可能有跨域问题,把xhr.send放在xhr.onreadystatechange后比较好
复制代码
var xhr = null
if (window.XMLHttpRequest) {
xhr = new XMLHttpRequest() //经常使用浏览器自带
} else {
xhr = new ActiveXObject("Microsoft.XMLHttp") //IE6自带
}
console.log(xhr.readystate) // 0
xhr.open("get", "http://www.baidu.com", true) // 第三个参数 true 表明异步
console.log(xhr.readystate) // 1
// 这部分是该部份内容新增
xhr.onreadystatechange = function () {
console.log(xhr.readystate)
//readystate 为xhr的一个属性,其会随着ajax发送的进度变化而变化,刚开始建立xhr时是0,open以后是1,如示例
// readystate == 4时 表示请求完成 已经接收到数据
// status == 200 网络请求 ,请求到的结果会有一个状态码,来表示这个请求是否正常
// 200表示请求成功
// http状态码
// 2**表示成功
// 3**表示重定向
// 4**表示客户端错误,404页面没有找到
// 5**表示服务端错误
if (xhr.readyState == 4 && xhr.status == 200) {
console.log(xhr.responseText)
//若是有返回的结果,返回的结果存在xhr.responseText这个属性里
var data = JSON.parse(xhr.responseText)
// 将jsonz数据转换为js对象
//扩展知识:将js对象转换为json数据
//JSON.stringify(data)
}
}
xhr.send()
//至此就完成了这种方式,既能够用代码控制,并且页面不会跳转,而且服务端返回的结果咱们能够用JS继续处理
复制代码
<img src="https://gss0.bdstatic.com/94o3dSag_xI4khGkpoWK1HF6hhy/baike/c0%3Dbaike92%2C5%2C5%2C92%2C30/sign=4b1e0ff44da98226accc2375ebebd264/faf2b2119313b07e6a5add8902d7912396dd8c48.jpg" alt="">
// 虽然也是跨域的可是是能够被跨域请求的
复制代码
<iframe src="https://www.baidu.com" frameborder="0" width="600" height="600"></iframe>
//虽然跨域,可是能够跨域请求到
复制代码
$.ajax({
url:"https://www.baidu.com",
type:"get",
dataType:"jsonp" //返回类型
success : function(data){ //成功后返回的数据
console.log(data);
}
})
//JSonp跨域,只能使用get方法, 若是咱们设置的是post方法,JQuery会自动转换为get方法
//但不是在JSONP里面只能使用get方法
//首先JQuery会先判断是否同源,若同源,那么设置的是什么就是什么
//若不是同源,不管设置的是什么,都改成get
复制代码
//封装
function ajax(mode, url, callback, data, flag) {
// 兼容
var xhr = null
if (window.XMLHttpRequest) {
xhr = new XMLHttpRequest() //经常使用浏览器自带
} else {
xhr = new ActiveXObject("Microsoft.XMLHttp") //IE6自带
}
//事件
xhr.onreadystatechange = function () {
if (xhr.readystate == 4) {
if (xhr.status == 200) {
callback(xhr.responseText)
} else {
console.log('error')
}
}
}
//格式要求
mode = mode.toUpperCase(); // 将请求方式变为大写的
if (mode == 'GET') {
// get请求要把请求参数拼接到地址里面
xhr.open(mode, url + '?' + data, flag) // 第三个参数 true 表明异步
xhr.send()
} else if (mode == 'POST') {
xhr.open(mode, url, flag)
// 设置Content-type 请求头 ,设置成相应的数据格式, 此处为数据传送的编码格式
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded')
//post请求必须把请求参数放到请求体里面
xhr.sed(data)
}
}复制代码