我有一个Javascript文件,其中的代码使用Javascript ES6标准编写。该文件在chrome中可以正常工作,但在IE中不起作用。完成日志后,我发现问题在于进行ajax调用。以下代码是我尝试拨打电话的地方:
var response = await fetch(url, xhrRequestObject);
if (response.ok) {
var jsonResponse = await response.json();
return jsonResponse;
}
我通过谷歌搜索并找到了一些polyfill来纠正此问题。但是我没有得到如何使用这些不正确的javascript文件的
关于如何在纯js文件中使用这些polyfill的任何建议?
答案 0 :(得分:3)
无法重新填充新的语法功能,例如您在此处使用的“ await”关键字。
相反,最好的选择是使用Babel之类的编译器。编译器将使用您的 modern 代码,并尝试使其在较旧的浏览器版本中可执行。我不确定Babel是否支持async / await,但是转译的代码是否可以在IE中执行。
答案 1 :(得分:2)
我不敢相信我没有提到使用Babel,有关更多信息,请参见Marcel Gerber's answer。
但是,如果您不想转运:
任何fetch
填充都必须提供或依赖Promise
填充。然后,由于您的目标是IE,因此无法使用async
函数和await
关键字,因为它们是在ES2018中添加的,并且不受任何版本的IE支持。
因此,您必须使用promise语法而不是await
:
fetch(url, xhrRequestObject).
.then(function(response) {
if (!response.ok) {
throw new Error("HTTP error, status = " + response.status);
}
return reponse.json();
})
.then(function(data) {
// ...use `data` here, it's the result of parsing the JSON
})
.catch(function(error) {
// ...handle error here...
});
或者如果您将其退回给呼叫者(您的代码表明您可能是这样):
return fetch(url, xhrRequestObject).
.then(function(response) {
if (!response.ok) {
throw new Error("HTTP error, status = " + response.status);
}
return reponse.json();
});
请注意,调用方需要在返回的诺言中处理错误。