2012-07-18 10 views
6

this tutorialに基づいてAJAXクエリを承認しようとしています。 Cryptoライブラリを使用して適切な認証情報を送信する前に、要求ヘッダーを設定します。私が抱えている問題は、ヘッダーが要求に応じて設定されていないように見えることです。ここに私のコードは次のとおりです。jQuery AJAXヘッダー承認

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

ヘッダーが設定されていないと思いますか?あなたは実際のxhr呼び出しを検査しましたか? 'Crypto'、' username'か 'password'のどちらかが' undefined'に設定されましたか? curlを使用してヘッダー(-H)を設定し、サーバー側の問題でないかどうかを確認することもできます。ところで、私はそのブログ投稿を書いた人です;-) – pdeschen

+0

私はログにxhr呼び出しを書いていますが、オブジェクト内で何を探していますか?私はチェックして、すべて3が正しく定義されています。何が起きているのかは明らかな理由から401の不正なエラーが出ています。それは知って良い、良い投稿です。 –

+0

とChromeの場合、開発者ツールを開いて、[ネットワーク]タブを選択し、次にXHR要素を選択すると、実際のAjaxリクエスト、コンテンツ、ヘッダーなどを調べることができます。 – pdeschen

答えて

8

問題がJSONPdataTypeを設定していませんでした。これが行われなかったので、ブラウザは呼び出しを標準のAJAX要求と解釈し、同じ原点ポリシーでブロックされていたことを意味していました。参照用のコードをワーキング

(クレジットはCrpytoを示唆するために@pdeschenに行く):

<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

'btoa(username +": "+ password")でbase64にユーザ名とパスワードをエンコードすることもできます –

+0

@DanielHigueras Nice!この関数について知りませんでしたが、[IE 10+でしか利用できないようですが、ちょっと..スクープIE –

0

このついには私のために動作するようです。個々のコールベースで衝突が発生する可能性があります。このメソッドを将来の接続オプションのデフォルトとして設定します。

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

'ajaxSetup'は存在しないようですので、' ajaxSend'を使用しました: \t '$ドキュメント).ajaxSend(function(e、xhr、settings){ \t \t xhr.setRequestHeader( "Authorization"、 "mytoken"); \t}); '。 http://api.jquery.com/ajaxSend/を参照してください。 – falsarella

関連する問題