0

経由でローカルホストの保護された CouchDB データベースにアクセスする$.ajaxと、ユーザー名とパスワードを求めるアラートが表示されます。プロンプトをキャンセルすると、CouchDB はエラーを警告し、$.ajax エラー コールバックは実行されません。許可されたユーザーを url に渡すと ( http://user:pass@local...)、successコールバックが適切に実行されます。

では、Couch に対して認証済みの ajax クエリを作成し、独自のエラー処理関数を使用することは可能ですか?

編集、コード:

var request = $.ajax({
        url: myUrl,
        type: "GET",
        dataType: "jsonp",
        success: function(){
          console.log("ok");
        },
        error: function(){
          console.log("error");
        }
      });
  • myUrlのようにクレデンシャルが含まれていない場合http://localhost:5984/mydb/handshakeDoc、プロンプトをキャンセルした後にエラー コールバックが実行されることはありません。

  • myUrlのような無効な資格情報が含まれている場合http://user:invalidpass@localhost:5984/mydb/handshakeDoc、エラー プロンプトが引き続き表示され、プロンプトをキャンセルした後にエラー コールバックが実行されることはありません。

  • 有効な資格情報が含まれている場合myUrl、成功のコールバックが実行されます

4

1 に答える 1

0

----- 可能な解決策 -----

だから、私は私のために働いた解決策を得ました。ただし、クロス オリジン ポリシーを回避するには、Apache をプロキシ サーバーとして使用する必要がありました。

ここでの考え方は、クロス ドメイン ポリシーの問題を取り除き、http サーバーを使用してリクエストをローカルに cupdb サービスにプロキシすることです。example.com/couch へのすべてのリクエストは、couchdb サービスにリダイレクトされます。そうすれば、jsonp リクエストを使用する必要がなくなります。

独自のエラー処理を使用できるかどうかについて尋ねた最初の問題は、jQuery の jsonp 要求に直接リンクされています。エラー ハンドラーを使用しないためです。まったく呼び出されません。

アパッチ構成:

<VirtualHost 123.123.123.123:80>
    ServerName example.com

    ProxyPass           /couch      http://localhost:5984
    ProxyPassReverse    /couch      http://localhost:5984
</VirtualHost>

jQuery ajax リクエスト:

var request = $.ajax({
    url: "http://example.com/couch",
    dataType: "json",
 }).done(function() {console.log("done");})
   .fail(function() {console.log("fail");})
   .always(function() {console.log("always");});
});

----- 元の投稿 -----

これを試すことができます:

var request = $.ajax({
    url: myUrl,
    type: "GET",
    username: user,
    password: pass,
    dataType: "jsonp",
    success: function(){
      console.log("ok");
    },
    error: function(){
      console.log("error");
    }
  });

jQuery では、2 つの ajax パラメーター (ユーザー名とパスワード) を介して http 基本認証を使用できます。

または、CouchDB jQuery プラグインを試してみてください。

于 2013-09-10T11:36:52.197 に答える