reqwest與fetch的使用

reqwest的使用

不少人看到reqwest,第一感受就是:「哎,哥們你寫錯了吧,應該是request吧。」 額,表示很傷〜真的沒寫錯.html

reqwest的使用,官方npm包說的很直白。ajax

It's AJAX
All over again. Includes support for xmlHttpRequest, JSONP, CORS, and CommonJS Promises A.

普通的reqwest寫法跟ajax大抵差很少,像下面這樣:npm

// 普通請求
reqwest({
    url: 'path/to/json'
  , type: 'json'
  , method: 'post'
  , data: { foo: 'bar', baz: 100 }        // 入參
  , error: function (err) { }
  , success: function (resp) {
      qwery('#content').html(resp.content)
    }
})

// jsonp請求
reqwest({
    url: 'path/to/json'
  , type: 'jsonp'
  , method: 'get'                    // jsonp請求,method可不寫,寫成post,依然會被瀏覽器默認爲get
  , error: function (err) { }
  , success: function (resp) {
      qwery('#content').html(resp.content)
    }
})

// cors請求
reqwest({
    url: 'path/to/json'
  , type: 'json'
  , method: 'post'
  , contentType: 'application/x-www-form-urlencoded'
  , crossOrigin: true                  // cors跨域,服務端與客戶端存在cookie等數據憑證交互時須要設置crossOrigin,withCredentials
  , withCredentials: true
  , error: function (err) { }
  , success: function (resp) {
      qwery('#content').html(resp.content)
    }
})

// promise寫法
reqwest({
    url: 'path/to/data.jsonp?foo=bar'
  , type: 'jsonp'
  , jsonpCallback: 'foo'
})
  .then(function (resp) {
    qwery('#content').html(resp.content)
  }, function (err, msg) {
    qwery('#errors').html(msg)
  })
  .always(function (resp) {
    qwery('#hide-this').hide()
  })

fetch的使用

// 請求html 
fetch('/users.html')
  .then(function(response) {
    return response.text()              // 將內容將化成字符串類型數據
  }).then(function(body) {
    document.body.innerHTML = body
  })

// 提交json數據
fetch('/users', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({                // fetch的入參數據跟reqwest的data不太同樣,是body
    name: 'Hubot',
    login: 'hubot',
  })
})

// cors請求
fetch('https://example.com:1234/users', {
  mode: "cors",                       // 設置爲支持跨域請求
  credentials: 'include'              // 設置容許發送相關憑證
})

fetch的mode配置項有3個值,以下:

same-origin:該模式是不容許跨域的,它須要遵照同源策略,不然瀏覽器會返回一個error告知不能跨域;
其對應的response type爲basic。

cors: 該模式支持跨域請求,顧名思義它是以CORS的形式跨域;固然該模式也能夠同域請求不須要後端額外的CORS支持;
其對應的response type爲cors。

no-cors: 該模式用於跨域請求可是服務器不帶CORS響應頭,也就是服務端不支持CORS;這也是fetch的特殊跨域請求方式;
其對應的response type爲opaque


// fetch不支持jsonp,那麼須要叫上他的兄弟fetchJsonp
fetchJsonp('/users.jsonp')
  .then(function(response) {
    return response.json()
  }).then(function(json) {
    console.log('parsed json', json)
  }).catch(function(ex) {
    console.log('parsing failed', ex)
  })
相關文章
相關標籤/搜索