我使用vanilla js向我的服务器发出了小的异步GET请求。
var rReq = new XMLHttpRequest();
rReq.onload = function (e) {
window.updateCartnRows(e.target.response);
};
rReq.open('GET', '/usr/cart/xhrRemoveItemsByType/' + type, true);
rReq.responseType = 'text';
rReq.send();
从客户端的角度来看,它按预期工作,但我的服务器不会将其视为异步请求,它会失败xhr检查我是否设置它。
Equal Jquery请求正常工作:
$.get('/usr/cart/xhrRemoveItemsByType/' + type, function (e) {
console.log(e);
window.updateCartnRows(e);
});
X-Requested-With“XMLHttpRequest”http标头的区别,它在Jquery请求中默认设置。 我发现vanilla js查询可以用这一行修复:
rReq.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
但我对此解决方案存在疑问,例如文档(例如MDN)没有提到设置此标头的必要性,只是XMLHttpRequest.open()方法中async的真参数。
答案 0 :(得分:1)
首先,您要混淆不相关的事情:请求是否异步,以及请求是否来自XMLHttpRequest
对象,彼此无关。
XMLHttpRequest
specification中没有任何内容表示必须设置该标头。从历史上看,有些实现设置了它,但这不是标准化的。
jQuery的源代码涉及显式设置该头(除了跨源请求),这就是你在通过jQuery的XHR包装器发出的请求中看到它的原因。
如果您希望请求包含标题,请在调用setRequestHeader
之前使用您在问题中包含的代码将其添加到send
。
答案 1 :(得分:1)
XMLHttpRequest
只是发送http
请求的http
客户端。 http协议中没有async/sync
。它只是浏览器中的一个视图。
答案 2 :(得分:1)
设置标头是jQuery特定的事情,请参阅https://github.com/jquery/jquery/blob/master/src/ajax/xhr.js#L59
您可以在What's the point of the X-Requested-With header?
详细了解这样做的原因我认为如果你的后端需要它,你设置它的实现是直截了当的。