Javascript 带承诺的XMLHttpRequest返回空响应
我试图在不使用jquery的情况下调用ajax请求。通过使用ECMA脚本6:Javascript 带承诺的XMLHttpRequest返回空响应,javascript,ajax,es6-promise,Javascript,Ajax,Es6 Promise,我试图在不使用jquery的情况下调用ajax请求。通过使用ECMA脚本6: var promise1 = new Promise(function(resolve, reject) { var xhr = new XMLHttpRequest(); var url = urls.urlListChapters.replace(0, specificationId); xhr.open('GET', url, true); xhr.
var promise1 = new Promise(function(resolve, reject) {
var xhr = new XMLHttpRequest();
var url = urls.urlListChapters.replace(0, specificationId);
xhr.open('GET', url, true);
xhr.responseType = 'json';
xhr.onload = function() {
if (xhr.status === 200) {
alert(xhr.response);
resolve(xhr.response);
} else {
reject(new Error(xhr.statusText));
}
};
xhr.onerror = function() {
reject(new Error("Network error"));
};
xhr.send();
});
promise1.then(function(data) {
alert('Your public IP address is: ' + data);
}, function(status) {
alert('Something went wrong.');
});
我得到的回答是“null”。然而,使用我的oljquery方法,我确实得到了对象列表
$.ajax({
url: urls.urlListChapters.replace(0, specificationId),
dataType: 'json',
method: 'GET',
})
.done(function(data) {
var data = JSON.parse(data);
console.log(data);
alert(1)
})
.fail(function(jqXHR, textStatus, errorThrown){
console.log(jqXHR);
alert('WHAT!');
});
有什么我遗漏的吗?检查浏览器开发人员工具网络选项卡,查看请求的发送/接收内容
xhr。如果设置responseType='json'
,则响应将是一个对象,Internet Exploder不支持该响应类型-因此在这种情况下,response
将是一个字符串-您最好(如果您需要支持IE)不设置响应类型,然后执行resolve(JSON.parse(xhr.response))
将jQuery代码移植到此解决方案时遇到了相同的问题:您应该改用fetchAPI和polyfill。没有理由手动承诺XHR。