如何对CouchDB执行Ajax请求(http:// .couchone.com /)
我正在尝试创建一个简单的AJAX(通过jQuery)请求到http:// yourusername .couchone.com /(就像我在localhost上安装了couchdb一样)
如果我通过浏览器访问http://**yourusername**.couchone.com/
,我会得到: {"couchdb":"Welcome","version":"1.0.1"}
所以,它看起来像一个序列化的JSON。
所以我写了一个JS代码:
$(function() { $.getJSON('http://www.********.couchone.com/', function(data) { console.log(data.couchdb); console.log(data.version); }); });
但代码不起作用。 FireBug的控制台显示GET请求没有响应(整行是红色的)我能看到的一切都是Request-Header和Response-Header,但是没有DATA(作为响应)
请求标题:
Host : www.*******.couchone.com User-Agent : Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.2.10) Gecko/20100914 Firefox/3.6.10 FirePHP/0.4 Accept : application/json, text/javascript, */* Accept-Language : de-de,de;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding : gzip,deflate Accept-Charset : ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive : 115 Connection : keep-alive Origin : null
响应标题:
Server : CouchDB/1.0.1 (Erlang OTP/R13B) Date : Sun, 26 Sep 2010 12:45:47 GMT Content-Type : application/json Content-Length : 40 Cache-Control : must-revalidate
想法? 建议?
PS抱歉英语不好
跨站点安全模型阻止您对其他域执行JSON请求。
您需要使用JSONP才能实现这一目标。 它以 include而不是XMLHTTPRequest的forms执行请求。
包含的安全模型不同。
我不知道couchdb是否支持JSONP。 通常,对JSONP的请求如下所示:
http://someUrl/somePath?jsonp=mycallback
响应数据读取jsonp参数并返回有效的javascript以在父页面的contenxt中执行:
myCallback({ JSON:data, JSON:data });
您必须确保您信任JSONP提供程序,因为您实际上是在为其提供对页面的javascript执行访问权限。 在你的情况下你可能会这样做,因为它是你自己的couchdb数据库。
没有其他解决方案,如果传递的URL与您的页面不是同一个域,则标准$ .getJSON()将不起作用。
PS我看了couchone.com,我没有看到任何暗示他们支持JSONP的东西。 您将需要自己的服务器端包装器脚本,它只是将请求转发到couchone并发回响应批处理(这有利于隐藏您的实际couchdb提供程序URL),或者找到支持JSONP的其他提供程序。
我会说MightyE完全正确,直到后记 – CouchOne确实支持JSONP。 转到http://YOURSITE.couchone.com/_utils/config.html并将httpd
部分中的allow_jsonp更改为true
。 之后,
$.ajax({ url: 'http://yoursite.couchone.com/', type: 'get', dataType: 'jsonp', success: function(data) { alert(data.couchdb); alert(data.version); } });
将工作。