通过ajax调用CouchDB时获得空响应

时间:2010-03-23 21:55:09

标签: jquery ajax json couchdb

我是CouchDB的新手,所以请耐心等待。

我有一个在VM上运行的CouchDB实例。我可以通过浏览器通过蒲团或直接访问它:

http://192.168.62.128:5984/articles/hot_dog

在浏览器中调用该URL会返回正确的JSON。但是,当我尝试通过ajax调用完全相同的URL时,我什么也得不到:

var ajaxUrl = 'http://192.168.62.128:5984/articles/hot_dog';
$.getJSON(ajaxUrl, null, function(data) { alert(data); });

查看Firebug的响应标头,向我显示HTTP响应为200content-length的大小正确。甚至Etag也与CouchDB中的内容匹配。但响应本身是

网址绝对正确;我已经三重检查,并直接复制/粘贴它(如果不是这样,它不会给出200响应)。我正在使用jQuery 1.4.2和CouchDB 0.8

发生了什么事?

4 个答案:

答案 0 :(得分:5)

尝试将callback=?添加到此类网址中。这将触发jQuery发出jsonp请求。

var ajaxUrl = 'http://192.168.62.128:5984/articles/hot_dog?callback=?';

如果这不能另外修复它,你应该在浏览器中附加这个url给出的json的示例输出。

答案 1 :(得分:5)

当您尝试从其他Web服务器获取数据时,您需要执行JSONP查询。首先,在最新版本的CouchDB中,您需要在配置(.ini)文件中启用JSONP查询。 (默认情况下禁用,因为CouchDB 1.0)在[httpd]部分中,您需要添加

  

allow_jsonp = true

完成此操作后,您可以在CouchDB上生成JSONP查询。

在jQuery中你必须添加?callback =?到URL以触发JSONP查询。

快乐的跨源资源分享每个人。

答案 2 :(得分:2)

听起来非常强烈,就像您正在尝试制作跨域AJAX请求一样,浏览器会拒绝该请求。为了解决这个问题,您可以像上面的答案一样使用JSONP,但这会限制您使用GET请求;您将无法添加,修改或删除记录。

如果您尝试使用CouchDB进行跨域AJAX调用,我建议您查看此库:

http://github.com/benvinegar/couchdb-xd

答案 3 :(得分:-2)

首先这是一个json问题,你已经标记了jquery ......

如果你需要jquery那么...查找load()函数。

$( '#选择')负载(ajaxURL); 警报($( '#选择器')。HTML())