Vượt qua các tiêu đề yêu cầu trong một cuộc gọi AJAX GET của jQuery


241

Tôi đang cố gắng vượt qua các tiêu đề yêu cầu trong AJAX GET bằng jQuery. Trong khối sau, "dữ liệu" sẽ tự động chuyển các giá trị trong chuỗi truy vấn. Có cách nào để truyền dữ liệu đó trong tiêu đề yêu cầu không?

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

Những điều sau đây cũng không hoạt động

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

Câu trả lời:


289

Sử dụng 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
tôi biết điều này là siêu cũ bây giờ. nhưng tôi muốn thêm rằng nên có dấu phẩy sau: beforeSend: function (xhr) {xhr.setRequestHeader ('X-Test-Header', 'test-value');}
matthew_360

beforeSend: function (xhr) {xhr.setRequestHeader ('X-Test-Header', 'test-value');} hoạt động tốt trong chrome và firefox nhưng không hoạt động trong IE8. không có X-Test-Header gửi. Làm thế nào để sửa nó? Thx
dùng1940268

Tôi đã thử nhưng nó gặp lỗi khi tôi chuyển chi tiết tiêu đề khi sử dụng "jquery-1.11.1.min.js"
Ghanshyam Baravaliya

4
xem câu trả lời dưới đây, phù hợp hơn nhiều
thedanotto

Nếu tôi muốn thêm X-Test-HeaderX-Test-Headervào thì beforeSendsao?
Si8

393

Kể từ jQuery 1.5, có một headershàm băm mà bạn có thể chuyển vào như sau:

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

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

tiêu đề (đã thêm 1.5): Bản đồ các cặp khóa / giá trị tiêu đề bổ sung để gửi cùng với yêu cầu. Cài đặt này được đặt trước khi hàm beforeSend được gọi; do đó, mọi giá trị trong cài đặt tiêu đề có thể được ghi đè từ bên trong hàm beforeSend.


6
Điều này có thể được thiết lập trên toàn cầu?
Chuyến đi

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

6
Các tài liệu jQuery không khuyên bạn nên sử dụng $ .ajaxSetup () nữa ( api.jquery.com/jQuery.ajaxSetup )
Glen Selle

2
@Glen Lý do của họ là các plugin có thể mong đợi các cài đặt mặc định hoạt động. Cá nhân, tôi nghĩ rằng nếu bạn thay đổi toàn cầu một cái gì đó, một cái gì đó phụ thuộc vào cài đặt mặc định có thể không hoạt động.
MiniRagnarok

1
@Trip Đề xuất của tôi cho toàn cầu ... hãy viết trình bao bọc của riêng bạn cho các cuộc gọi ajax (trừu tượng) thay vì gọi $ .ajax ().
Erik Philips

44

$.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) {
                
            }
        });


Sử dụng jQuery 1.7.2, API C # 2.x, khi cố gắng trích xuất từ HttpRequestMessage r = new HttpRequestMessage(); int mylogonID = Convert.ToInt32(r.Headers.GetValues("logonID"));lỗi tiêu đề vì không tìm thấy tiêu đề đã cho. bởi vì r.Headers là trống rỗng.
Jeb50

bạn có thể muốn thử một cái gì đó như - chuỗi [] ids = System.Web.HttpContext.Cản.Request.Headers ["logonID"]. Split (',');
người đam mê
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.