Javascript 如何使用js或jQuery向ajax请求添加自定义HTTP头?
有人知道如何使用JavaScript或jQuery添加或创建自定义HTTP头吗?假设您的意思是“使用ajax时”和“HTTP请求头”,然后在传递给Javascript 如何使用js或jQuery向ajax请求添加自定义HTTP头?,javascript,jquery,ajax,http-headers,httprequest,Javascript,Jquery,Ajax,Http Headers,Httprequest,有人知道如何使用JavaScript或jQuery添加或创建自定义HTTP头吗?假设您的意思是“使用ajax时”和“HTTP请求头”,然后在传递给ajax()的对象中使用headers属性 标题(添加1.5) 默认值:{} 与请求一起发送的附加标头键/值对的映射。此设置在调用beforeSend函数之前设置;因此,可以从beforeSend函数中覆盖headers设置中的任何值 -下面是一个使用XHR2的示例: function xhrToSend(){ // Attempt to cr
ajax()的对象中使用headers
属性
标题(添加1.5)
默认值:{}
与请求一起发送的附加标头键/值对的映射。此设置在调用beforeSend函数之前设置;因此,可以从beforeSend函数中覆盖headers设置中的任何值
-下面是一个使用XHR2的示例:
function xhrToSend(){
// Attempt to creat the XHR2 object
var xhr;
try{
xhr = new XMLHttpRequest();
}catch (e){
try{
xhr = new XDomainRequest();
} catch (e){
try{
xhr = new ActiveXObject('Msxml2.XMLHTTP');
}catch (e){
try{
xhr = new ActiveXObject('Microsoft.XMLHTTP');
}catch (e){
statusField('\nYour browser is not' +
' compatible with XHR2');
}
}
}
}
xhr.open('POST', 'startStopResume.aspx', true);
xhr.setRequestHeader("chunk", numberOfBLObsSent + 1);
xhr.onreadystatechange = function (e) {
if (xhr.readyState == 4 && xhr.status == 200) {
receivedChunks++;
}
};
xhr.send(chunk);
numberOfBLObsSent++;
};
希望有帮助
如果创建对象,则可以使用setRequestHeader函数在发送请求之前分配名称和值。假设使用JQuery ajax,可以添加自定义头,如-
$.ajax({
url: url,
beforeSend: function(xhr) {
xhr.setRequestHeader("custom_header", "value");
},
success: function(data) {
}
});
应使用XMLHttpRequest对象的“setRequestHeader”方法
或者,如果希望为以后的每个请求发送自定义标头,则可以使用以下命令:
$.ajaxSetup({
headers: { "CustomHeader": "myValue" }
});
这样,未来的每个ajax请求都将包含自定义头,除非请求的选项显式覆盖。您可以在ajaxSetup
上找到更多信息。根据您的需要,有几种解决方案
如果要向单个请求添加自定义头(或一组头),只需添加头
属性:
// Request with custom header
$.ajax({
url: 'foo/bar',
headers: { 'x-my-custom-header': 'some value' }
});
如果要向每个请求添加默认头(或一组头),请使用$.ajaxSetup()
:
如果要向每个请求添加一个头(或一组头),请使用发送前的钩子$。ajaxSetup()
:
编辑(更多信息):需要注意的一点是,使用ajaxSetup
只能定义一组默认标题,在发送之前只能定义一个。如果多次调用ajaxSetup
,将只发送最后一组标头,并且只执行发送前的最后一次回调。应避免使用中所述的$.ajaxSetup()
。请改用以下方法:
$(document).ajaxSend(function(event, jqXHR, ajaxOptions) {
jqXHR.setRequestHeader('my-custom-header', 'my-value');
});
您也可以不使用jQuery来实现这一点。重写XMLHttpRequest的send方法并在其中添加标头:
XMLHttpRequest.prototype.realSend = XMLHttpRequest.prototype.send;
var newSend = function(vData) {
this.setRequestHeader('x-my-custom-header', 'some value');
this.realSend(vData);
};
XMLHttpRequest.prototype.send = newSend;
您可以使用js
异步函数发送(url、数据){
让r=等待获取(url{
方法:“张贴”,
标题:{
“我的标题”:“abc”
},
正文:JSON.stringify(数据),
})
return wait r.json()
}
//示例用法
让url为空https://server.test-cors.org/server?enable=true&status=200&methods=POST&headers=my-标题';
异步函数run()
{
让jsonObj=wait-send(url,{some:'testdata'});
console.log(jsonObj[0].request.httpMethod+'was send-打开chrome控制台>网络查看');
}
run()代码>在我真正想完成这项工作的地方,这似乎实际上不起作用。您应该确保在实际的ajax调用之前调用ajaxSetup。我不知道这不起作用的任何其他原因:)如果我在执行$.ajax
回调时定义一个新的beforeSend
,会发生什么情况?您只能定义一个beforeSend
回调。如果您调用$.ajaxSetup({beforeSend:func…})
两次,则第二次回调将是唯一触发的回调。更新了我的答案以添加有关ajaxSetup
的更多详细信息。看起来它不适用于CORS请求(每个浏览器)。有解决办法吗?@Si8,我觉得这是个跨域问题。您不能从一个域向另一个域发出请求。尝试查看CORS,看看这是否有帮助。虽然这在2011年可能是正确的,但一般来说,最好不要重新发明轮子,而是使用像Zepto或jQuery这样的AJAX库。除非您试图向现有的XHR2调用添加一个头,并且不想开始重写它来使用jQuery来实现这一点。。。在这一点上,@gryzzly有了唯一可行的答案。@AliGajani问题是某些应用程序或库(如THREE.js)不使用$。ajax*
函数b/c它们不依赖于jQuery,而是使用XHR,因此这是这些情况下唯一有效的选项。@AliGajani另外,这不仅是网络加载时间,而且是库的解析时间。另外,如果您不小心添加了哪些依赖项,那么很快就会得到一个依赖项太多的项目
$(document).ajaxSend(function(event, jqXHR, ajaxOptions) {
jqXHR.setRequestHeader('my-custom-header', 'my-value');
});
XMLHttpRequest.prototype.realSend = XMLHttpRequest.prototype.send;
var newSend = function(vData) {
this.setRequestHeader('x-my-custom-header', 'some value');
this.realSend(vData);
};
XMLHttpRequest.prototype.send = newSend;