AJAX

什么是AJAX
用JavaScript腳本(原生的XMLHttpRequest請求)向服務(wù)器發(fā)起HTTP請求,得到服務(wù)器返回的數(shù)據(jù),在進行處理。

一個請求分為幾個部分

HOST:xxx.com:2222
Content-Type:application/x-www-url-encoded

AJAX的請求三部分

let request =new XMLHttpRequste();
request.open('GET','/xxx')//配置request
requset.send();

AJAX包括以下步驟
1.創(chuàng)建XMLHttpRequert實例
2.發(fā)出HTTP請求
3.接收服務(wù)器傳回的數(shù)據(jù)
4.更新網(wǎng)頁數(shù)據(jù)


1.AJAX可以用JS可以設(shè)置任意請求的header嗎
答:可以。用以下語句:
第一部分:request.open('get','/xxx');
第二部分:request.setHeader('content-type','/x-www-form-urlencoded');request.setRequestHeader('mika','19 ')
第三部分:是回車,不用設(shè)置
第四部分:request.send('a=1&b=2')
2.AJAX可以用JS可以獲取任意響應(yīng)hearder嗎
答:可以??梢暂敵稣Z句:
第一部分:request.status(狀態(tài)碼)/request.statusText(狀態(tài),例如“ok“”)
第二部分:request.getResponseHeader() / request.getAleeResponseHeaders()
第四部分:request.responseText()
request.getAllResponseHeaders()//打印出全部響應(yīng)


1.客戶端 set JS后request四部分給服務(wù)端 服務(wù)端重新setJS后 response四部分給客戶端
2.服務(wù)端有端口,客戶端沒有

封裝一個AJAX

window.jQuery.ajax = function (url, method, body, successFn, failFn) {
    let request = new XMLHttpRequest()
    request.open(method, url)
    request.onreadystatechange = () => {
        if (request.readyState === 4) {
            if (request.status >= 200 && request.status <= 300) {
                console.log('成功')
                successFn.call(undefined, request.responseText)
            }
            else if (request.status >= 400) {
                failFn.call(undefined, request)
            }
        }
        request.send(body)
    }
}

使用:

myButton.addEventListener('click', (e) => {
    window.jQuery.ajax({
        url: '/xxx',
        method: 'get',
        successFn: () => { },
        failFn: () => { }
    })
(如果用這個方式使用的話,封裝的引用方式得更改)
   let method=options.method
   let body =options.body
.....
可以使用ES6析構(gòu)賦值
window.jQuery.ajax = function(options){
let {method,body,success,failFn}=options
}
這句話和上面的那幾句引用一模一樣。
再進行精簡后,可以直接放到上面來//ES6
window.jQuery.ajax = function({method,body,success,failFn}){
///里面寫代碼
}

ES5和ES6語法
同一個功能,不同寫法,ES6更加高級

ES5
var x='???'
var o={}
o[x]=true //x的value as key === '???'=true

ES6
let x='???'
let o={
[x]:true;
//[key]:value
}

第一次了解Promise
回調(diào)的規(guī)范版
用法:

    myButton.addEventListener('click', (e) => {
        $.ajax({
            url: '/xxx',
            method: 'get',
        }).them(
            (responseText) => {
                console.log(responseText);
                return responseText
            },//這里是成功處理
            (request) => {
                console.log('失敗啦')
            }//這里是失敗處理
        ).them((上一個的處理結(jié)果) => {
            console.log(上一次的處理結(jié)果),//如果循環(huán)兩次,也是第一次成功,第二次失敗。第一次成功的結(jié)果會影響到第二次
                (request) => { console.log('error2') }
        })
    })

最后使用Promise的封裝AJAX代碼

window.jQuery.ajax = function ({ url, method, body, headers, }) {
  return new Promise(function (resolve, reject) {//成功,失敗
      let request = new XMLHttpRequest()
      request.open(method, url)
      request.onreadystatechange = () => {
          if (request.readyState === 4) {
              if (request.status >= 200 && request.status <= 300) {
                  resolve.call(undefined, request.responseText)
              }
              else if (request.status >= 400) {
                  reject.call(undefined, request)
              }
          }
      }
      request.send(body)
  })
}
---封裝---
---使用---
myButton.addEventListener('click', (e) => {
  $.ajax({
      url: '/xxx',
      method: 'get',
      headers: {
          'content-type': 'application/x-www-form-urlencoded',
          'frank': '18'
      }
  }).then(
      (then) => { console.log(text) },
      (request) => { console.log(request) }
  )

c

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 如何發(fā)請求? 用form可以發(fā)post或get請求,但是但是會刷新頁面或新開頁面 用 a 可以發(fā) get 請求,但...
    darkTi閱讀 369評論 0 0
  • 如何發(fā)請求? 用form可以發(fā)請求,但是會刷新頁面或新開頁面;用a可以發(fā)get請求,但是也會刷新頁面或新開頁面;用...
    是劉快啊閱讀 460評論 0 1
  • 1.JS 可以設(shè)置任意請求 header 嗎第一部分 request.open('get', '/xxx')第二部...
    阿龍喲閱讀 454評論 0 0
  • 一、JS操作請求與響應(yīng) 之前,已經(jīng)了解過請求與響應(yīng)都由4部分組成,那么在使用AJAX發(fā)請求時能否自由的設(shè)置或是獲取...
    格林姆大師閱讀 362評論 0 1
  • ??2005 年,Jesse James Garrett 發(fā)表了一篇在線文章,題為“Ajax: A new App...
    霜天曉閱讀 943評論 0 1

友情鏈接更多精彩內(nèi)容