ผ่านส่วนหัวคำขอในการโทร jQuery AJAX


242

ฉันกำลังพยายามผ่านส่วนหัวคำขอใน AJAX GET โดยใช้ jQuery ในบล็อกต่อไปนี้ "data" จะส่งค่าใน querystring โดยอัตโนมัติ มีวิธีการส่งผ่านข้อมูลนั้นในส่วนหัวคำขอแทนหรือไม่

$.ajax({
         url: "http://localhost/PlatformPortal/Buyers/Account/SignIn",
         data: { signature: authHeader },
         type: "GET",
         success: function() { alert('Success!' + authHeader); }
      });

ต่อไปนี้ใช้ไม่ได้เช่นกัน

$.ajax({
         url: "http://localhost/PlatformPortal/Buyers/Account/SignIn",
         beforeSend: { signature: authHeader },
         async: false,                    
         type: "GET",
                    success: function() { alert('Success!' + authHeader); }
      });

คำตอบ:


289

การใช้beforeSend:

$.ajax({
         url: "http://localhost/PlatformPortal/Buyers/Account/SignIn",
         data: { signature: authHeader },
         type: "GET",
         beforeSend: function(xhr){xhr.setRequestHeader('X-Test-Header', 'test-value');},
         success: function() { alert('Success!' + authHeader); }
      });

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

http://www.w3.org/TR/XMLHttpRequest/#the-setrequestheader-method


4
ตอนนี้ฉันรู้แล้วว่ามันสุดยอดมาก แต่ฉันต้องการเพิ่มว่าควรมีเครื่องหมายจุลภาคหลังจาก: beforeSend: function (xhr) {xhr.setRequestHeader ('X-Test-Header', 'test-value');}
matthew_360

beforeSend: function (xhr) {xhr.setRequestHeader ('X-Test-Header', 'test-value');} ทำงานได้ดีใน chrome และ firefox แต่ไม่ได้อยู่ใน IE8 ไม่มีการส่ง X-Test-Header จะแก้ไขได้อย่างไร? ขอบคุณ
user1940268

ฉันได้ลองแล้ว แต่มันเกิดข้อผิดพลาดเมื่อฉันส่งรายละเอียดส่วนหัวในการใช้ "jquery-1.11.1.min.js"
Ghanshyam Baravaliya

4
ดูคำตอบด้านล่างที่เกี่ยวข้องมากขึ้น
thedanotto

เกิดอะไรขึ้นถ้าฉันต้องการเพิ่มX-Test-HeaderและX-Test-HeaderไปbeforeSend?
Si8

394

ตั้งแต่ jQuery 1.5 มีheadersแฮชที่คุณสามารถส่งผ่านได้ดังนี้:

$.ajax({
    url: "/test",
    headers: {"X-Test-Header": "test-value"}
});

จากhttp://api.jquery.com/jQuery.ajax :

ส่วนหัว (เพิ่ม 1.5): แผนที่ของคู่คีย์ / ค่าเพิ่มเติมที่จะส่งไปพร้อมกับคำขอ การตั้งค่านี้ถูกตั้งค่าก่อนที่จะเรียกใช้ฟังก์ชัน beforeSend ดังนั้นค่าใด ๆ ในการตั้งค่าส่วนหัวสามารถเขียนทับได้จากภายในฟังก์ชั่น beforeSend


6
สามารถตั้งค่านี้ได้ทั่วโลกหรือไม่
เดินทาง

77
ใช่:$.ajaxSetup({headers: {"X-Test-Header": "test-value"}})
Lukas

6
jQuery docs ไม่แนะนำให้ใช้ $ .ajaxSetup () อีกต่อไป ( api.jquery.com/jQuery.ajaxSetup )
Glen Selle

2
@Glen เหตุผลของพวกเขาคือปลั๊กอินอาจคาดหวังว่าการตั้งค่าเริ่มต้นจะทำงาน โดยส่วนตัวฉันคิดว่ามันเป็นสิ่งที่กำหนดว่าหากคุณเปลี่ยนบางสิ่งบางอย่างทั่วโลกสิ่งที่ขึ้นอยู่กับการตั้งค่าเริ่มต้นอาจไม่ทำงาน
MiniRagnarok

1
@Trip คำแนะนำของฉันสำหรับทั่วโลก ... เขียน wrapper ของคุณเองสำหรับการโทร ajax (abstraction) แทนการโทร $ .ajax ()
Erik Philips

45

$.ajax({
            url: URL,
            type: 'GET',
            dataType: 'json',
            headers: {
                'header1': 'value1',
                'header2': 'value2'
            },
            contentType: 'application/json; charset=utf-8',
            success: function (result) {
               // CallBack(result);
            },
            error: function (error) {
                
            }
        });


ใช้ jQuery 1.7.2, C # API 2.x เมื่อพยายามแยกHttpRequestMessage r = new HttpRequestMessage(); int mylogonID = Convert.ToInt32(r.Headers.GetValues("logonID"));ข้อผิดพลาดส่วนหัวออกเนื่องจากไม่พบส่วนหัวที่ระบุ เพราะ r.Headers ว่างเปล่า
Jeb50

คุณอาจต้องการลอง - สตริง [] ids = System.Web.HttpContext.Current.Request.Headers ["logonID"]. Split (',');
ผู้ที่กระตือรือร้น
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.