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); }
      });
Cranialsurge
sumber

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

Adam
sumber
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.

Lukas
sumber
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) {
                
            }
        });

penggemar
sumber
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