2011-08-17 28 views
28

Tôi đã kế thừa một số mã mà cuối cùng sẽ là một phần của cuộc gọi API. Dựa trên mã hiện có, cuộc gọi là một bài đăng để truy xuất mã JSON với access_token. Mặc dù điều này thường đơn giản và giống như mọi API khác, mã này yêu cầu phải có trường httpheader tùy chỉnh cho bí mật ứng dụng khách.Bài đăng JSON với Trường HTTPHeader tùy chỉnh

Tôi đã có thể thực hiện công việc này trong Mục tiêu C với URLRequest, v.v. nhưng bây giờ tôi đang tạo cuộc gọi cho một thành phần web, tôi đã được khoanh vùng.

Tôi đang sử dụng một bài jquery khá chuẩn

 $.post('https://url.com', 
     {access_token:'XXXXXXXXXXXXXXXXXXX', 
     function(data){ 
      console.info(data); 
     }, 'json'); 

Với một HTTP-equiv trong tiêu đề. Nhưng bài viết không bao giờ lấy dữ liệu và bản thân máy chủ không nhận ra rằng bất kỳ cuộc gọi nào đã được thực hiện (ngay cả một cuộc gọi chưa hoàn thành).

Tôi có thể phải xóa mã này và bắt đầu lại, nhưng nếu có ai gặp sự cố này trước đây, vui lòng cung cấp bất kỳ thông tin chi tiết nào.

Trả lời

95

Nội dung bạn đã đăng có lỗi cú pháp nhưng không có sự khác biệt vì bạn không thể chuyển tiêu đề HTTP qua $.post().

Miễn là bạn đang sử dụng phiên bản jQuery> = 1.5, hãy chuyển sang $.ajax() và chuyển tùy chọn headers (docs). (Nếu bạn đang ở trên một phiên bản cũ của jQuery, tôi sẽ cho bạn thấy làm thế nào để làm điều đó thông qua các tùy chọn beforeSend.)

$.ajax({ 
    url: 'https://url.com', 
    type: 'post', 
    data: { 
     access_token: 'XXXXXXXXXXXXXXXXXXX' 
    }, 
    headers: { 
     Header_Name_One: 'Header Value One', //If your header name has spaces or any other char not appropriate 
     "Header Name Two": 'Header Value Two' //for object property name, use quoted notation shown in second 
    }, 
    dataType: 'json', 
    success: function (data) { 
     console.info(data); 
    } 
}); 
+0

Cảm ơn bạn rất nhiều! Bạn đã tiết kiệm cho tôi những giờ thất vọng. Bây giờ, đối tượng đang được kéo trong Safari, nhưng không phải trong Firefox hoặc Chrome. Đây có phải là vấn đề đã biết, có liên quan không? Nếu vậy, tôi sẽ yêu cái nhìn sâu sắc của bạn. Nếu không, tôi sẽ tìm ra. – Izzy

+0

Khi sử dụng Chrome và Firefox, bạn thấy gì (thông qua Công cụ dành cho nhà phát triển hoặc Firebug) được gửi đến máy chủ và bạn thấy gì? Bạn đang gỡ lỗi gì ở máy chủ để xem yêu cầu có đến và đúng không? – JAAulde

+0

Không có lỗi xuất hiện trong Firebug, nhưng không có trở lại. Trong Firefox Web Console, tôi thấy điều này: 'OPTIONS https: // [url.com] [HTTP/1.1 200 OK 441ms]' và trong các công cụ của Nhà phát triển Chrome tôi thấy điều này: XMLHttpRequest không thể tải 'https://url.com. Nguồn gốc null không được cho phép bởi Access-Control-Cho phép Xuất xứ.' Máy chủ hiển thị yêu cầu đã được gửi đến. Nếu yêu cầu không đúng, nó sẽ ghi lại thông báo lỗi. – Izzy

0

tôi đã cố gắng như bạn đã đề cập, nhưng chỉ có tham số đầu tiên đang trải qua và nghỉ ngơi tất cả đều xuất hiện trong máy chủ dưới dạng undefined. Tôi đang chuyển JSONWebToken làm một phần của tiêu đề.

.ajax({ 
    url: 'api/outletadd', 
    type: 'post', 
    data: { outletname:outletname , addressA:addressA , addressB:addressB, city:city , postcode:postcode , state:state , country:country , menuid:menuid }, 
    headers: { 
     authorization: storedJWT 
    }, 
    dataType: 'json', 
    success: function (data){ 
     alert("Outlet Created"); 
    }, 
    error: function (data){ 
     alert("Outlet Creation Failed, please try again.");   
    } 

    }); 
5

nếu ai muốn sử dụng .post() sau đó này sẽ đặt tiêu đề cho tất cả các yêu cầu trong tương lai được thực hiện với jquery

$.ajaxSetup({ 
    headers: { 
     'Content-Type': 'application/json', 
     'Accept': 'application/json' 
    } 
}); 

sau đó hãy chắc .post của bạn() gọi như bình thường.

Các vấn đề liên quan