当通过$.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
包含有效凭据,则执行成功回调
答案 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。