2011-09-15 26 views
18

Tôi đang cố gắng để thực hiện một yêu cầu ajax đến các điểm tiếp xúc google API với các thiết lập sau:jQuery JSONP ajax, tiêu đề xác thực không được thiết lập

$.ajax({ 
    url: "https://www-opensocial.googleusercontent.com/api/people/@me/@all", 
    dataType: 'jsonp', 
    data: { 
    alt: 'json-in-script' 
    }, 
    headers: { 
    'Authorization': 'Bearer ' + token 
    }, 
    success: function(data, status) { 
    return console.log("The returned data", data); 
    } 
}); 

Nhưng tiêu đề xác thực dường như không được thiết lập. Bất kỳ ý tưởng?

The request

+0

Phiên bản nào của jQuery bạn đang sử dụng? – Joe

+0

jQuery .ajax có trường 'tên người dùng' và 'mật khẩu' sẽ thực hiện xác thực cơ bản cho bạn nếu cần –

Trả lời

23

tôi đã cùng một vấn đề thời gian gần đây. Hãy thử điều này:

$.ajax({ 
    url: "https://www-opensocial.googleusercontent.com/api/people/@me/@all", 
    dataType: 'jsonp', 
    data: { 
    alt: 'json-in-script' 
    }, 
    success: function(data, status) { 
    return console.log("The returned data", data); 
    }, 
    beforeSend: function(xhr, settings) { xhr.setRequestHeader('Authorization','Bearer ' + token); } 
}); 

EDIT: Có vẻ như không thể thực hiện được với JSONP. Modify HTTP Headers for a JSONP request

+0

'xhr.setRequestHeader' không hoạt động. Có vẻ như tôi cần đọc một câu hỏi mà bạn đã liên kết. –

+0

Nó hoàn toàn phù hợp với tôi. Cảm ơn Andrew. –

-1

Chỉ cần làm điều này (jquery 2.0, nhưng nên làm việc trong các phiên bản trước)

$.ajax({ 
     url: "/test", 
     headers: {"Authorization": "Bearer " + $('#myToken').val()} 
    })   
    .done(function (data) { 
     console.log(data); 
    }) 
    .fail(function (jqXHR, textStatus) { 
     alert("error: " + textStatus); 
    }); 
+0

OK, nhưng đây không phải là yêu cầu ajax JSONP. Đây là yêu cầu ajax đơn giản. –

+0

tùy chọn 'tiêu đề' phải hợp lệ ngay cả khi JSONP của nó. Yêu cầu tiêu đề là một phần của giao thức HTTP, JSONP là mức hack ứng dụng/trình duyệt. – rynop

2

Khi xác thực là cần thiết trong một yêu cầu miền chéo, bạn phải sử dụng một máy chủ proxy của một số loại.

Vì sử dụng dataType: jsonp kết quả trong yêu cầu HTTP thực sự được tạo từ tập lệnh được thêm vào DOM, các tiêu đề được đặt trong $.ajax sẽ không được sử dụng.

0

Is vẻ như hầu hết các nguồn lực OAUTH2 REST của chấp nhận các tham số access_token như một phần của địa chỉ yêu cầu

http://self-issued.info/docs/draft-ietf-oauth-v2-bearer.html#query-param

xin vui lòng, hãy thử đoạn mã sau thay vì:

$.ajax({ 
      dataType: 'jsonp', 
      url: url,     
      data: { 
       'access_token':token.access_token 
      }, 
      jsonpCallback: 'thecallback', 
      success: function(data){ 
       _cb(data); 
      }, 
      error: function(d){ 
       _cb(d); 
      } 
     }); 
Các vấn đề liên quan