2013-07-03 131 views
4

我正在构建一个非常简单的webapp。我今天安装了Couch 1.3.1并创建了一个数据库。我试图将文档保存到我的本地沙发(本地主机:5984)与客户端浏览器也localhost上一个职位,但不同的端口(6789)CouchdB Jquery Ajax POST CORS

var dbIp = "http://localhost:5984/commute"; 
var data = {state:0,timestamp:"faketime"}; 
$.ajax({ 
    type: 'POST', 
    crossDomain: true, 
    contentType: "application/json", 
    url: dbIp, 
    data: data, 
    success: function(result) { 
    console.log(result); 
    } 
}); 

我得到:

XMLHttpRequest cannot load http://localhost:5984/commute-tracker. Origin http://localhost:6789 is not allowed by Access-Control-Allow-Origin. 

我已经修改了local.ini启用CORS与

[httpd] 
enable_cors = true 
[cors] 
origins = * 
[cors] 
methods = GET, POST, PUT, DELETE 

我可以看到所有这些变化反映在蒲团配置文件中列出couchdb spec。我也有卷曲测试数据库:

curl -X POST localhost:5984/commute -H "Content-Type: application/json" -d '{"tags":"sure","name":"made it"}' 

的卷曲工作得很好,但我不能做,因为访问控制的浏览器类似的职位允许起源。还有什么我错过了,或者我可以改变什么使这个POST成为可能?

+0

我不认为jquery支持CORS,因为IE7,8和9不支持它。你使用的是什么版本的jQuery? – HMR

+0

我正在使用jQuery 1.10.1 –

+0

当您在浏览器(Chrome)中打开url时,您应该能够在网络选项卡中看到响应标题(按F12打开开发工具),确保它具有正确的cors。我认为你已经在使用Chrome了,因为这个错误看起来像Chrome会给你带来的错误。 JQuery应该与Cors一起工作,只要你没有使用IE <9 – HMR

回答

0

想要做跨域的事情,无论是CORS还是JSONP都不理想。

由于您实际上控制了Web服务器实例和couchdb实例(我假设您对服务器有管理权限),我建议使用反向代理服务couchdb作为主要Web应用程序的端点。

如果你使用Apache mod_proxy将允许你这样做,或nginx的是另一个伟大的HTTP和反向代理服务器......将像一个配置指令:

ProxyPass /couch_db/ http://www.localhost:5984/(用于mod_proxy的)

会让你张贴到http://localhost:6789/couch_db/commute

+0

*虽然直接发布到沙发上可能会出现在POC应用程序中,但我也强烈建议您使用node.js,PHP或其他一些快速设置的服务器语言通过一个API进行交易,从您的演示文稿中插入至少一个其他抽象层,你可以使用你的数据库作为门卫(验证,认证等)。 –