代码之家  ›  专栏  ›  技术社区  ›  V-Light

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

  •  4
  • V-Light  · 技术社区  · 15 年前

    我试图创建一个简单的Ajax(通过jquery)请求到http:/// 用户名 .couchone.com/(与在本地主机上安装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请求没有响应(整行显示为红色),我能看到的只是一个请求头和响应头,但没有数据(作为响应)

    请求头:

    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
    

    思想?建议?

    对不起,英语不好

    2 回复  |  直到 15 年前
        1
  •  5
  •   MightyE    15 年前

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

    你需要使用 JSONP 才能做到这一点。它将请求作为 <script> 包含而不是xmlhttpRequest。 <脚本& GT; 包含不具有相同的安全模型。

    不过,我不知道CouchDB是否支持JSONP。通常jsonp的请求如下:

    http://someUrl/somePath?jsonp=mycallback
    

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

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

    您必须确保您信任JSONP提供程序,因为您本质上是为他们提供对页面的JavaScript执行访问。在您的情况下,您可能会这样做,因为它是您自己的couchdb数据库。

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

    另外,我在coochone.com上看到了,但我看不出有什么东西表明他们支持jsonp。您将需要自己的服务器端包装脚本,该脚本只需将请求转发到couchone并以批发方式发回响应(这有隐藏实际couchdb提供程序url的优势),或者找到另一个支持jsonp的提供程序。

        2
  •  10
  •   Ian    15 年前

    我要说的是,在Postscript之前,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);
       }
    });
    

    会工作。