1

DBMS にアクセスするためのサードパーティ API として使用する Delphi XE2 DataSnap Rest サーバーを構築しようとしています。

xe2 で REST Datasnap ウィザードを認証と承認とともに使用するときに提供されるサンプル メソッドの機能を拡張しました。

私が作成したすべてのサーバー メソッドが、ブラウザーから直接アクセスしたときに期待されるデータを返すことを確認できます。

この問題は、$.ajax() 呼び出しからサーバーへの認証を試みることから発生します。

ブラウザーのアドレス バーからアクセスすると、ユーザー名とパスワードの入力を求められます。両方に「dev」と入力すると、続行できます。

ajax() のユーザー名とパスワードのパラメーターを「dev」に設定すると、HTTP 401 応答が返されます。

私はそれを正しくやっていると思いますが、コードスニペットは次のとおりです。

$("#contentdiv").click(function(){
        $.ajax({
            type:"GET",
            cache:"false",
            username:"dev",
            password:"dev",
            url:"http://192.168.0.2:8080/datasnap/rest/TServerMethods1/methodname/",
            dataType:"jsonp",
            statusCode: {
                200: function(data){
                    alert('success ');
                }
            }               
        });
});

認証をオフにすると、HTTP 200 応答を正常に取得できます (ただし、JSON Delphi DataSnap に構文エラーが返されますが、それは別の機会に質問します)。

また、知っておく価値があること-手動でログインしてからajaxを実行すると機能します-これは、資格情報がキャッシュされているなどの理由によるものと想定しています。

これらのテクノロジーはどちらもまったく新しいものなので、優しくしてください。重要な可能性があるものを省略した場合は、お知らせください。ここで取り上げます。

4

1 に答える 1

0

Ajax コードは JSONP を使用し、サーバーは基本認証を使用します。

この回答に対するコメントでは、JSONP には基本認証に必要な USER / PWD ヘッダーを含めることができないと書かれています。

jQuery.ajax リクエストと jsonp による基本認証

理由は次のとおりです(上記の回答からの引用):

JSONP の動作は異なります。これは、ファイルを取得するためのタグ インクルードを介した GET 要求であるため、特別なヘッダーなどは送信しません。

于 2012-07-13T15:04:13.697 に答える