Jquery 如何执行对CouchDB的Ajax请求(http://<;usename>;.couchone.com/)

Jquery 如何执行对CouchDB的Ajax请求(http://<;usename>;.couchone.com/),jquery,ajax,couchdb,Jquery,Ajax,Couchdb,我正在尝试创建一个简单的AJAX请求(通过jQuery)到http://yourusername.couchone.com/(与我在本地主机上安装couchdb的情况基本相同) 如果我通过浏览器进入http://**yourusername**.couchone.com/,我会得到: {“couchdb”:“欢迎”,“版本”:“1.0.1”}因此,它看起来像一个序列化的JSON 所以我写了一个JS代码: $(function() { $.getJSON('http://www.*

我正在尝试创建一个简单的AJAX请求(通过jQuery)到http://yourusername.couchone.com/(与我在本地主机上安装couchdb的情况基本相同)

如果我通过浏览器进入
http://**yourusername**.couchone.com/
,我会得到:
{“couchdb”:“欢迎”,“版本”:“1.0.1”}
因此,它看起来像一个序列化的JSON

所以我写了一个JS代码:

$(function() {
        $.getJSON('http://www.********.couchone.com/', function(data) {
                console.log(data.couchdb);
                console.log(data.version);

            });
    });
但是代码不起作用。FireBug的控制台显示GET请求没有响应(整行显示为红色),我看到的是一个请求头和响应头,但没有数据(作为响应)

请求头:

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
响应标题:

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
想法?建议


请注意,很抱歉英语不好

跨站点安全模型阻止您向其他域执行JSON请求

你需要使用它来实现这一点。它将请求作为包含而不是XMLHTTPRequest来执行<代码>包含不具有相同的安全模型

我不知道couchdb是否支持JSONP。通常,对JSONP的请求如下所示:

http://someUrl/somePath?jsonp=mycallback
响应数据读取该jsonp参数并返回要在父页面上下文中执行的有效javascript:

myCallback({ JSON:data, JSON:data });
您必须确保您信任JSONP提供程序,因为您本质上是给他们对页面的javascript执行访问权。在您的情况下,您可能会这样做,因为它是您自己的couchdb数据库

没有其他解决方案,如果传递的URL与您的页面不在同一个域中,则标准的$.getJSON()将不起作用


另外,我看了couchone.com,没有看到任何迹象表明他们支持JSONP。您需要自己的服务器端包装器脚本,该脚本只需将请求转发给couchone并批量发送回响应(这具有隐藏实际couchdb提供程序URL的优势),或者找到另一个支持JSONP的提供程序。

我认为这可能是完全正确的,直到postscript——CouchOne确实支持JSONP。转到并将
httpd
部分中的
allow_jsonp
更改为
true
。此后,

$.ajax({
   url: 'http://yoursite.couchone.com/',
   type: 'get',
   dataType: 'jsonp',
   success: function(data) {
      alert(data.couchdb);
      alert(data.version);
   }
});

将起作用。

这应该是浏览器的限制,如果不是来自同一域,则不允许加载数据。检查附加注释区域。我听说过Couchapp,它们作为一个HTMLW/JS存在于浏览器中,可以向CouchDB服务器执行AJAX请求。只要我知道Ajax与couchdb的对话就是重点,因为您根本不需要任何服务器端语言(例如PHP)+1:Thanx来表示allow_jsonp提示!作品(默认情况下,在我的1.2.1 couchdb上禁用了allow_jsonp)