jquery ajax自定义头,关于javascript:如何使用js或jQuery为ajax请求添加自定义HTTP标头?...

有谁知道如何使用JavaScript或jQuery添加或创建自定义HTTP标头?

根据您的需要,有几种解决方案......

如果要将自定义标头(或标头集)添加到单个请求,则只需添加headers属性:

// Request with custom header

$.ajax({

url: 'foo/bar',

headers: { 'x-my-custom-header': 'some value' }

});

如果要为每个请求添加默认标头(或标头集),请使用$.ajaxSetup():

$.ajaxSetup({

headers: { 'x-my-custom-header': 'some value' }

});

// Sends your custom header

$.ajax({ url: 'foo/bar' });

// Overwrites the default header with a new header

$.ajax({ url: 'foo/bar', headers: { 'x-some-other-header': 'some value' } });

如果要为每个请求添加标头(或标头集),请使用beforeSend挂钩与$.ajaxSetup():

$.ajaxSetup({

beforeSend: function(xhr) {

xhr.setRequestHeader('x-my-custom-header', 'some value');

}

});

// Sends your custom header

$.ajax({ url: 'foo/bar' });

// Sends both custom headers

$.ajax({ url: 'foo/bar', headers: { 'x-some-other-header': 'some value' } });

编辑(更多信息):要注意的一点是,使用ajaxSetup,您只能定义一组默认标题,并且只能定义一个beforeSend。如果多次调用ajaxSetup,则只会发送最后一组标题,并且只会执行最后一次发送前回调。

如果在执行$.ajax时定义新的beforeSend会发生什么?

您只能定义一个beforeSend回调。如果你两次调用$.ajaxSetup({ beforeSend: func... }),那么第二个回调将是唯一一个触发的回调。

更新了我的答案,以添加有关ajaxSetup的更多详细信息。

大家好,标题:{'x-my-custom-header':'some value'}在IE 8中不起作用。它在firefox和chrome中运行良好。我必须使用IE 8发送自定义标题。你有想法让它工作吗?谢谢

@ user1940268您是否尝试进行跨域(CORS)请求或其他类型的自定义标头?我当然在IE8中使用了所有这些技术并确定它们有效。一个例外是xDomain请求,您需要在IE8中使用其他技术。

@Prestaul thx为您的回复。我的ajax请求在同一个域中。 $(document).ready(function(){$ .ajax({url:url,type:"POST",headers:{'x-my-custom-header':'some value'}});});

@ user1940268,我认为必须在发布的代码之外发生其他事情(在尝试阅读标题时可能是服务器端)。你的ajax电话看起来是对的,我认为我不能在这里帮助你。

看起来它不适用于CORS请求(每个浏览器)。有工作吗?

在这里找到我的解决方案stackoverflow.com/questions/8685678/

@svassr CORS有不同的要求,正如您所发现的,除了一些(非常基本的)标题之外,任何其他标题都必须通过Access-Control-Request-Headers标题列入白名单。

对于我的情况,我希望http header accept值严格地只是text/plain。 ajax的accepts行为真的让我失望了。在我的text/plain之后,它不断添加额外的* / *。叹。指定headers效果更好。

我收到此错误:对预检请求的响应未通过访问控制检查

@ Si8,这看起来像是一个跨域问题。您无法从一个域向另一个域发出请求。尝试查看CORS,看看是否有帮助。

或者,如果要为每个将来的请求发送自定义标头,则可以使用以下内容:

$.ajaxSetup({

headers: {"CustomHeader":"myValue" }

});

这样,除非被请求的选项明确覆盖,否则每个未来的ajax请求都将包含自定义标头。您可以在此处找到有关ajaxSetup的更多信息

我真的想要实现这一点,这似乎并没有真正起作用。

那么你应该确保在实际的ajax调用之前调用ajaxSetup。我不知道为什么这不起作用的任何其他原因:)

以下是使用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('

Your 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函数在发送请求之前指定名称和值。

虽然这在2011年可能是正确的,但通常不要重新发明轮子,而是使用像Zepto或jQuery这样的AJAX库。

除非你试图在现有的XHR2调用中添加一个标题,并且不想开始重写它以便只使用jQuery ...在这一点上,@ gryzzly有唯一可行的答案。

@roryhewitt jQuery缩小了82kb,不知道为什么会出现问题..

@AliGajani问题是某些应用程序或库(如THREE.js)不使用$.ajax*函数b / c它们不依赖于jQuery而是使用XHR,因此在这些情况下这是唯一有效的选项。

@AliGajani此外,它不仅仅是网络加载时间,还包括库的解析时间。另外,如果您不小心添加了哪些依赖项,则可以快速获得具有太多依赖项的项目

假设JQuery ajax,您可以添加自定义标头,如 -

$.ajax({

url: url,

beforeSend: function(xhr) {

xhr.setRequestHeader("custom_header","value");

},

success: function(data) {

}

});

您也可以在不使用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;

您应该避免使用文档中描述的$.ajaxSetup()。请改用以下内容:

$(document).ajaxSend(function(event, jqXHR, ajaxOptions) {

jqXHR.setRequestHeader('my-custom-header', 'my-value');

});

假设您的意思是"当使用ajax"和"HTTP请求标头"时,请使用传递给ajax()的对象中的headers属性

headers(added 1.5)

Default: {}

A map of additional header key/value pairs to send along with the request. This setting is set before the beforeSend function is called; therefore, any values in the headers setting can be overwritten from within the beforeSend function.

- http://api.jquery.com/jQuery.ajax/

应该使用XMLHttpRequest对象的"setRequestHeader"方法

http://help.dottoro.com/ljhcrlbv.php

你可以使用js fetch

async function send(url,data) {

let r= await fetch(url, {

method:"POST",

headers: {

"My-header":"abc"

},

body: JSON.stringify(data),

})

return await r.json()

}

// Example usage

let url='https://server.test-cors.org/server?enable=true&status=200&methods=POST&headers=my-header';

async function run()

{

let jsonObj = await send(url,{ some: 'testdata' });

console.log(jsonObj[0].request.httpMethod + ' was send - open chrome console > network to see it');

}

run();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Unity中使用WebViewPrefab的LoadUrl方法打开带自定义标头的网页,您可以按照以下步骤进行操作: 1. 首先,确保您已经正确地将WebViewPrefab添加到场景中,并将其设置为可见。 2. 获取WebViewPrefab组件的引用,您可以通过以下方式之一获取: - 在代码中声明一个公共变量,并在Unity编辑器中将WebViewPrefab拖放到该变量上。 - 通过代码获取GameObject并使用GetComponent方法获取WebViewPrefab组件。 3. 创建一个Dictionary<string, string>类型的变量,用于存储自定义标头。这个字典将存储每个标头的键值对。 4. 在字典中添加您要发送的自定义标头。例如,如果您要添加一个名为"Authorization"的标头,值为"Bearer token",可以使用以下代码: ```csharp Dictionary<string, string> headers = new Dictionary<string, string>(); headers.Add("Authorization", "Bearer token"); ``` 5. 使用LoadUrl方法加载网页并传递自定义标头字典作为参数。例如,如果要加载一个URL为"https://example.com"的网页,您可以使用以下代码: ```csharp webViewPrefab.WebView.LoadUrl("https://example.com", headers); ``` 6. 确保在加载网页之前WebViewPrefab已经完成初始化,并且在调用LoadUrl之前WebViewPrefab已经准备就绪。 通过以上步骤,您可以在Unity中使用WebViewPrefab的LoadUrl方法打开带有自定义标头的网页。请注意,具体的实现可能会根据您使用的WebView插件或库以及其提供的API有所不同,所以请参考相关文档和示例代码以获取更准确的操作指导。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值