使用jQuery在CouchDB中验证ajax查询

时间:2013-09-10 11:01:06

标签: javascript jquery couchdb

当通过$.ajax访问localhost受保护的CouchDB数据库时,它会提示询问用户名/密码的警报。如果我取消提示,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包含有效凭据,则执行成功回调

1 个答案:

答案 0 :(得分:0)

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

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

这里的想法是删除跨域策略的问题,并使用http-server将我们的请求本地代理到couchdb服务。 example.com/couch的每个请求都将重定向到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>

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 basic auth。

或者您可能想尝试CouchDB jQuery plugin