0

当通过 访问 localhost 的受保护 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-server 将我们的请求本地代理到 couchdb 服务。对 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 让您可以通过两个 ajax 参数(用户名和密码)使用 http 基本身份验证。

或者你可能想试试CouchDB jQuery 插件

于 2013-09-10T11:36:52.197 回答