在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')
複製代碼