ไม่มีใครรู้วิธีเพิ่มหรือสร้างส่วนหัว HTTP ที่กำหนดเองโดยใช้ JavaScript หรือ jQuery
ไม่มีใครรู้วิธีเพิ่มหรือสร้างส่วนหัว HTTP ที่กำหนดเองโดยใช้ JavaScript หรือ jQuery
คำตอบ:
มีหลายวิธีขึ้นอยู่กับสิ่งที่คุณต้องการ ...
หากคุณต้องการเพิ่มส่วนหัวที่กำหนดเอง (หรือชุดของส่วนหัว) ลงในคำขอส่วนบุคคลเพียงแค่เพิ่ม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
hook ด้วย$.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
หลายครั้งเฉพาะชุดส่วนหัวสุดท้ายเท่านั้นที่จะถูกส่งและเฉพาะการโทรกลับครั้งสุดท้ายก่อนส่งจะดำเนินการ
beforeSend
โทรกลับได้หนึ่งรายการเท่านั้น หากคุณโทร$.ajaxSetup({ beforeSend: func... })
ซ้ำสองครั้งการโทรกลับครั้งที่สองจะเป็นครั้งเดียวที่ไฟไหม้
ajaxSetup
ปรับปรุงคำตอบของฉันที่จะเพิ่มรายละเอียดเพิ่มเติมเกี่ยวกับ
หรือถ้าคุณต้องการส่งหัวข้อที่กำหนดเองสำหรับทุกคำขอในอนาคตคุณสามารถใช้สิ่งต่อไปนี้:
$.ajaxSetup({
headers: { "CustomHeader": "myValue" }
});
วิธีนี้ทุกคำขอ ajax ในอนาคตจะมีส่วนหัวที่กำหนดเองเว้นแต่จะถูกแทนที่อย่างชัดเจนโดยตัวเลือกของคำขอ คุณสามารถหาข้อมูลเพิ่มเติมได้ajaxSetup
ที่นี่
สมมติว่า JQuery ajax คุณสามารถเพิ่มส่วนหัวที่กำหนดเองเช่น -
$.ajax({
url: url,
beforeSend: function(xhr) {
xhr.setRequestHeader("custom_header", "value");
},
success: function(data) {
}
});
นี่คือตัวอย่างการใช้ 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 เพื่อกำหนดชื่อและค่าก่อนที่คุณจะส่งคำขอ
$.ajax*
ฟังก์ชัน b / c พวกเขาไม่ได้ขึ้นอยู่กับ jQuery และใช้ XHR แทนดังนั้นนี่เป็นตัวเลือกที่ถูกต้องเท่านั้นในกรณีเหล่านั้น
คุณสามารถทำได้โดยไม่ต้องใช้ jQuery แทนที่เมธอดการส่งของ XMLHttpRequest และเพิ่มส่วนหัวที่นั่น:
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;
สมมติว่าคุณหมายถึง "เมื่อใช้ ajax" และ " ส่วนหัวคำขอ HTTP " จากนั้นใช้headers
คุณสมบัติในวัตถุที่คุณส่งผ่านไปยังajax()
ส่วนหัว (เพิ่ม 1.5)
ค่าเริ่มต้น:
{}
แผนที่ของคู่คีย์ / ค่าเพิ่มเติมที่จะส่งไปพร้อมกับคำขอ การตั้งค่านี้ถูกตั้งค่าก่อนที่จะเรียกใช้ฟังก์ชัน beforeSend ดังนั้นค่าใด ๆ ในการตั้งค่าส่วนหัวสามารถเขียนทับได้จากภายในฟังก์ชั่น beforeSend
ควรใช้วิธี "setRequestHeader" ของวัตถุ XMLHttpRequest
คุณสามารถใช้การดึง js
beforeSend
เมื่อทำ$.ajax
อะไร