【发布时间】:2013-06-30 17:47:11
【问题描述】:
我正在制作一个非常简单的 web 应用程序的原型。我今天安装了 Couch 1.3.1 并创建了一个数据库。我正在尝试使用来自客户端浏览器的 POST 将文档保存到我的本地沙发(本地主机:5984),但端口不同(6789)
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,如 couchdb spec 中所述
[httpd]
enable_cors = true
[cors]
origins = *
[cors]
methods = GET, POST, PUT, DELETE
我可以看到所有这些更改都反映在蒲团的配置文件中。我还用 curl 测试了数据库:
curl -X POST localhost:5984/commute -H "Content-Type: application/json" -d '{"tags":"sure","name":"made it"}'
curl 工作得很好,但由于访问控制允许来源,我无法在浏览器中进行类似的 POST。我还缺少什么,或者我可以更改什么以使此 POST 成为可能?
【问题讨论】:
-
我不认为 jquery 支持 CORS,因为 IE7,8 和 9 支持的不是很好。你用的是什么版本的jQuery?
-
我使用的是 jquery 1.10.1
-
当您在浏览器 (Chrome) 中打开 url 时,您应该能够在网络选项卡中看到响应标头(按 F12 打开开发工具),确保它具有正确的 cors。我认为您已经在使用 Chrome,因为该错误看起来像是 Chrome 会给您的错误。只要您不使用 IE,JQuery 就应该与 cors 一起使用
-
是的,我看到带有预期标头的 OPTIONS “飞行前”请求,并且响应具有:'Allow: DELETE, GET, HEAD, POST' 'Cache-Control: must-revalidate' 但它给了我一个不允许的 405 方法
-
您应该尝试将
headers = accept, authorization, content-type, origin添加到您的CouchDB 设置的[cors]部分。这就是 Firefox、Chrome 和 Safari 似乎需要的标头组合。
标签: javascript jquery ajax couchdb cors