2012-07-18 36 views
6

this tutorial tabanlı bir AJAX sorgusunu yetkilendirmeye çalışıyorum. Kripto kitaplığını kullanarak uygun yetkilendirme bilgileriyle göndermeden önce istek başlıklarını ayarlar. Sorun şu ki, başlıklar istek üzerine ayarlanmış gibi görünmüyor.jQuery AJAX Başlık Yetkilendirme

beforeSend : function(xhr) { 
    var bytes = Crypto.charenc.Binary.stringToBytes(username + ":" + password); 
    var base64 = Crypto.util.bytesToBase64(bytes); 
    xhr.setRequestHeader("Authorization", "Basic " + base64); 
}, 
+0

Başlığın ayarlanmadığını düşünmenizi sağlayan nedir? Gerçek xhr çağrısını incelediniz mi? "Şifreli", "kullanıcı adı" veya "şifre" undefined "olarak ayarlanmış olabilir mi? Ayrıca curl kullanabilir ve üstbilgiyi (-H) ayarlayabilir ve sunucu tarafı sorun olup olmadığını görebilirsiniz. BTW, ben blog yazısı yazdı biri değilim ;-) – pdeschen

+0

Ben günlüğe xhr çağrı yazma, nesne içinde ne arıyorum? Kontrol ettim ve hepsi 3 doğru tanımlandı. Şu anda olan, açık nedenlerle 401 yetkisiz bir hata alıyorum. Bunu bilmek güzel, iyi mesaj. Chrome ile –

+0

, Geliştirici Araçları'nı açarsanız ve alt listeden Ağ sekmesini ve ardından XHR öğesini seçerseniz, gerçek ajax isteklerini, içeriğini, başlıkları ve tümünü inceleyebilirsiniz. – pdeschen

cevap

8

konu dataTypeJSONP ayarı değildi: İşte benim kod. Bu yapılmadığı için, tarayıcı, çağrıyı standart bir AJAX talebi olarak yorumladı ve bu, aynı menşe-politikası kapsamında engellenmesi anlamına geliyordu. referans için

Çalışma kod (kredi Crpyto öneren @pdeschen gider):

<script type='text/javascript'> 
// define vars 
var username = ''; 
var password = ''; 
var url = ''; 

// ajax call 
$.ajax({ 
    url: url, 
    dataType : 'jsonp', 
    beforeSend : function(xhr) { 
     // generate base 64 string from username + password 
     var bytes = Crypto.charenc.Binary.stringToBytes(username + ":" + password); 
     var base64 = Crypto.util.bytesToBase64(bytes); 
     // set header 
     xhr.setRequestHeader("Authorization", "Basic " + base64); 
    }, 
    error : function() { 
     // error handler 
    }, 
    success: function(data) { 
     // success handler 
    } 
}); 
</script> 
+1

Ayrıca kullanıcı adı ve şifreyi base64'e 'btoa (kullanıcı adı +:: + şifre) ile kodlayabilirsiniz' –

+0

@DanielHigueras Nice! Bu işlev hakkında bilmiyordum, [sadece IE 10 + 'da mevcut gibi görünüyor), ama hey .. vida IE –

0

Bu nihayet benim için çalışıyor gibi görünüyor. Bireysel çağrı temelinde çarpışmalar olabilir. Gelecekteki bağlantı seçenekleri için bu yöntemi varsayılan olarak ayarlar.

//Function(jqXHR jqXHR) 
$.ajaxSetup({beforeSend: function(jqXHR) { 
    jqXHR.setRequestHeader("My-Header", "My-Value"); 
} }); 
+2

' ajaxSetup 'artık yok gibi görünüyor, bu yüzden' ajaxSend 'kullanılır: \t '$ (belge) .ajaxSend (işlev (e, xhr, ayarlar) { \t \t xhr.setRequestHeader ("Yetkilendirme", "mytoken"); \t}); '. Bkz. Http://api.jquery.com/ajaxSend/ – falsarella