在AJAX
出现前,网页发送请求的有哪些呢?json
有没有什么其它的方法?后端
IE5
率先在JavaScript
中引入ActiveX
对象(API
),使得JavaScript
能够直接发起HTTP
请求。随后Mozilla
、Safari
、Opera
也跟进了,取名XMLHttpRequest
,并被归入W3C
规范当中。跨域
AJAX
:异步的JavaScript
和XML
。浏览器
XMLHttpRequest
发请求XML
格式的字符串XML
,并更新局部页面如何使用XMLHttpRequest
?安全
myButton.addEventListener('click', (e)=>{
let request = new XMLHttpRequest()
request.open('get', '/xxx') // 配置request
request.send()
request.onreadystatechange = ()=>{
if(request.readyState === 4){
console.log('请求响应都完毕了')
console.log(request.status)
if(request.status >= 200 && request.status < 300){
console.log('说明请求成功')
console.log(typeof request.responseText)
console.log(request.responseText)
let string = request.responseText
// 把符合 JSON 语法的字符串转换成 JS 对应的值
let object = window.JSON.parse(string)
// JSON.parse 是浏览器提供的
console.log(typeof object)
console.log(object)
} else if(request.status >= 400){
console.log('说明请求失败')
}
}
}
})
复制代码
后端代码:bash
if(path==='/xxx'){
response.statusCode = 200
response.setHeader('Content-Type', 'text/json;charset=utf-8')
response.setHeader('Access-Control-Allow-Origin', 'http://lvbin.com:8001')
response.write(`
{
"note":{
"to": "future",
"from": "now",
"heading": "greet",
"content": "Hello World"
}
}
`)
response.end()
复制代码
同源策略(Cross-Origin Resource Sharing
)服务器
例如如下的都是不能够的异步
那为何form
能够跨域请求呢?由于提交到另外一个域名以后,原页面的脚步没法获取新页面中的内容,浏览器认为这是安全的。post
而AJAX
是能够读取响应的内容,所以浏览器不能容许你这么作。其实请求已经发送出去了,只是拿不到响应的内容。总结来讲就是这个策略的本质是,一个域名的JS
,在未经容许的状况下,不得读取另外一个域名的内容,但浏览器不会阻止向另外一个域名发送请求。ui
CORS
跨域 假设http://lvbin.com:8001
须要访问http://lvbin.com:8002
,而且获取内容。那么只须要在http://lvbin.com:8002
后端添加下面一行代码:
response.setHeader('Access-Control-Allow-Origin', 'http://lvbin.com:8001')
复制代码