XMLHttpRequest慢......如何更快地做同样的事情?

时间:2017-04-15 00:16:52

标签: javascript jquery xmlhttprequest handlebars.js

这是我用来从文件加载Handlebars模板的函数。即使我正在加载本地文件,我发现它很慢。在我看来,XMLHttpRequest()对于本地文件来说并不是很大。有没有办法用例如做同样的事情。 jQuery get()或更快的东西?感谢

function getTemplate (name, callback, dir) {
  if (dir === undefined) dir = ''
  var xhr = new XMLHttpRequest()
  var url = '/scripts/templates/' + dir + name + '.html'
  xhr.open('GET', url, true)
  xhr.onreadystatechange = function () {
    if (xhr.readyState == 4 && xhr.status == 200) {
      var raw = xhr.responseText
      var compiled = Handlebars.compile(raw)
      callback(compiled)
    }
  }
  xhr.send()
}

用法示例:

getTemplate('no-results', function (tmp) {
    $(historyContainer).append(tmp())
  })

2 个答案:

答案 0 :(得分:0)

好的,这个调整接缝效果很好

function getTemplate (name, callback, dir) {
  if (dir === undefined) dir = ''
  var xhr = new XMLHttpRequest()
  var url = '/scripts/templates/' + dir + name + '.html'

  return fetch(url).then(function (res) {
    return res.text()
  }).then(function (html) {
    var compiled = Handlebars.compile(html)
    callback(compiled)
  })
}

答案 1 :(得分:-1)

阅读有关Fetch的this文章。您可以使用Fetch而不是XMLHttpRequest()。

Example:

@meth = GET | POST | PUT
@url = path
@data = {test1: "teste1"}

function ajaxRequest(meth, url, data) {
   return fetch(url, {
      method: meth,
      headers: {'Content-Type': 'application/json'},
      body: data,
      credentials: 'same-origin'
    })
    .then(resp => {
        if(resp.status != 200) throw new Error(resp.statusText)
        return resp.text()
    })

}