这是我用来从文件加载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())
})
答案 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()
})
}