2013-07-03 67 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進行交易,從您的演示文稿中插入至少一個其他抽象層,你可以使用你的數據庫作爲門衛(驗證,認證等)。 –