Lewati tajuk permintaan dalam panggilan GJA AJAX jQuery


242

Saya mencoba meneruskan header permintaan dalam AJAX GET menggunakan jQuery. Di blok berikut, "data" secara otomatis melewati nilai dalam querystring. Apakah ada cara untuk meneruskan data itu di header permintaan?

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

Berikut ini juga tidak berfungsi

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

Jawaban:


289

Gunakan 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
saya tahu ini sudah sangat tua sekarang. tapi saya ingin menambahkan bahwa harus ada koma setelah: beforeSend: function (xhr) {xhr.setRequestHeader ('X-Test-Header', 'test-value');}
matthew_360

beforeSend: function (xhr) {xhr.setRequestHeader ('X-Test-Header', 'test-value');} berfungsi dengan baik di chrome dan firefox tetapi tidak di IE8. tidak ada pengiriman X-Test-Header. bagaimana memperbaikinya? Thx
user1940268

saya telah mencoba tetapi ia melempar kesalahan ketika saya meneruskan detail tajuk menggunakan "jquery-1.11.1.min.js"
Ghanshyam Baravaliya

4
lihat jawaban di bawah ini, jauh lebih relevan
thedanotto

Bagaimana jika saya ingin menambahkan X-Test-Headerdan X-Test-Headerke beforeSend?
Si8

394

Pada jQuery 1.5, ada headershash yang bisa Anda berikan sebagai berikut:

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

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

header (ditambahkan 1,5): Peta pasangan kunci / nilai tajuk tambahan untuk dikirim bersama dengan permintaan. Pengaturan ini diatur sebelum fungsi beforeSend dipanggil; oleh karena itu, nilai apa pun dalam pengaturan tajuk dapat ditimpa dari dalam fungsi beforeSend.


6
Bisakah ini ditetapkan secara global?
Perjalanan

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

6
Dokumen jQuery tidak merekomendasikan menggunakan $ .ajaxSetup () lagi ( api.jquery.com/jQuery.ajaxSetup )
Glen Selle

2
@ Glen Alasan mereka adalah bahwa plugin mungkin mengharapkan pengaturan default berfungsi. Secara pribadi, saya pikir sudah pasti bahwa jika Anda mengubah sesuatu secara global, sesuatu yang bergantung pada pengaturan default mungkin tidak berfungsi.
MiniRagnarok

1
@ Trip Rekomendasi saya untuk global ... tulis pembungkus Anda sendiri untuk panggilan ajax (abstraksi) alih-alih menelepon $ .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) {
                
            }
        });


Menggunakan jQuery 1.7.2, C # API 2.x, ketika mencoba untuk mengekstrak dari HttpRequestMessage r = new HttpRequestMessage(); int mylogonID = Convert.ToInt32(r.Headers.GetValues("logonID"));kesalahan header karena Header yang diberikan tidak ditemukan. karena r.Headers kosong.
Jeb50

Anda mungkin ingin mencoba sesuatu seperti - string [] ids = System.Web.HttpContext.Current.Request.Headers ["logonID"]. Split (',');
penggila
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.