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

时间:2010-09-26 12:53:15

标签: jquery ajax couchdb

我正在尝试创建一个简单的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

想法?建议?

P.S。对不起英文不好

2 个答案:

答案 0 :(得分:10)

我会说MightyE完全正确,直到后记 - CouchOne确实支持JSONP。转到http://YOURSITE.couchone.com/_utils/config.html并将allow_jsonp部分中的httpd更改为true。之后,

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

会奏效。

答案 1 :(得分:5)

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

您需要使用JSONP才能实现这一目标。它将请求作为<script>包含而不是XMLHTTPRequest。 <script>包括没有相同的安全模型。

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

http://someUrl/somePath?jsonp=mycallback

响应数据读取jsonp参数并返回有效的javascript以在父页面的contenxt中执行:

myCallback({ JSON:data, JSON:data });

您必须确保您信任JSONP提供程序,因为您实际上是在为其提供对页面的javascript执行访问权限。在你的情况下你可能会这样做,因为它是你自己的couchdb数据库。

没有其他解决方案,如果传递的URL与您的网页不是同一个域,则标准的$ .getJSON()将无效。

P.S。我查看了couchone.com,我没有看到任何暗示他们支持JSONP的内容。您将需要自己的服务器端包装器脚本,它只是将请求转发到couchone并发回响应批处理(这有利于隐藏您的实际couchdb提供程序URL),或者找到支持JSONP的其他提供程序