Javascript 使用jQuery在CouchDB中验证ajax查询

Javascript 使用jQuery在CouchDB中验证ajax查询,javascript,jquery,couchdb,Javascript,Jquery,Couchdb,当通过$.ajax访问本地主机受保护的CouchDB数据库时,它会提示一个警报,询问用户名/密码。如果取消提示,CouchDB将发出错误警报,并且我的$.ajax错误回调将永远不会执行。如果我将授权用户传递到url(http://user:pass@本地…),正确执行成功回调 那么,有可能对coach进行经过身份验证的ajax查询并使用我自己的错误处理函数吗 编辑,代码: var request = $.ajax({ url: myUrl, type: "GET"

当通过
$.ajax
访问本地主机受保护的CouchDB数据库时,它会提示一个警报,询问用户名/密码。如果取消提示,CouchDB将发出错误警报,并且我的$.ajax错误回调将永远不会执行。如果我将授权用户传递到url(
http://user:pass@本地…
),正确执行
成功
回调

那么,有可能对coach进行经过身份验证的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
    包含有效凭据,则执行成功回调

——可能的解决方案-----

所以,我找到了一个适合我的解决方案。然而,我不得不使用apache作为代理服务器来规避跨源策略

这里的想法是消除跨域策略的问题,并使用http服务器在本地将我们的请求代理给couchdb服务。例如,example.com/coach的每个请求都将被重定向到couchdb服务。这样,您就不必再使用jsonp请求了

您最初询问的关于是否可以使用自己的错误处理的问题直接链接到jQuery中的jsonp请求,因为它们不使用错误处理程序——它们根本不会被调用

Apache配置:

<VirtualHost 123.123.123.123:80>
    ServerName example.com

    ProxyPass           /couch      http://localhost:5984
    ProxyPassReverse    /couch      http://localhost:5984
</VirtualHost>
-----原职-----

你可以试试这个:

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基本身份验证


或者您可能想尝试使用.

来澄清-取消提示时是否只调用了$.ajax.error?如果在提示中输入无效凭据,会发生什么情况?并且请发布您的代码。如果我输入了无效的凭据,提示仍然会出现。代码已更新。您是否向url发送任何数据?什么是handshakeDoc api方法?我在couchdb文档中找不到它。handshakeDoc只是一个文档示例。数据不需要执行与数据库的成功或错误连接(我只是将jsonp数据类型设置为允许跨源),谢谢,但已经尝试使用用户名/密码,没有运气(甚至没有使用正确的凭据)。是的,它只是提示登录警报,您从couchdb得到了什么错误?是否支持并启用jsonp?您甚至必须使用jsonp吗?jsonp是必需的,因为couchdb运行在JS发出ajax请求的不同端口,并且在couchdb配置中启用。在出现错误时,CouchDB只是提示另一个警报,说明需要进行身份验证。Ok。我发现了这个问题——jsonP请求不是用XMLHttpRequest对象发出的,因此不支持用户名/密码参数和正常的基本身份验证。我在寻找一个可行的解决办法。
var request = $.ajax({
    url: myUrl,
    type: "GET",
    username: user,
    password: pass,
    dataType: "jsonp",
    success: function(){
      console.log("ok");
    },
    error: function(){
      console.log("error");
    }
  });