首先,我的当前系统是这样的:
- CouchDB 1.0.2 PHP 5.3.6
- Apache httpd 2.2.19
- PECL http 1.7.1
- CouchDB-Lucene 0.6.1
我正在用CouchDB和CouchDB- lucene构建一个迷你搜索引擎。当用户输入一个查询,我POST到我的PHP脚本,然后查询couchdb-lucene。然后,Couchdb-lucene将一个匹配文档键的列表返回给PHP脚本。然后,我将数据(使用http_post_data)发送到一个带有键列表的List函数(详细信息请参见此处的"查询选项")。这个列表函数返回HTML格式的结果。这是工作的部分。
我的需求现在正在改变,我想只查询视图并返回JSON。但是,当我这样做时,这是来自http_post_data调用的响应:
HTTP/1.1 415 Unsupported Media Type
Server: CouchDB/1.0.2 (Erlang OTP/R13B)
Date: Sat, 09 Jul 2011 22:22:51 GMT
Content-Type: text/plain;charset=utf-8
Content-Length: 78
Cache-Control: must-revalidate
{"error":"bad_content_type","reason":"Content-Type must be application/json"}
http_post_data(url/of/view, $key_string, "Content-Type:application/json");
,但实际上不会返回任何内容(我正在查看Firebug中的输出)。为了返回我的结果,下面是相关的PHP:
HttpResponse::setContentType("application/json");
HttpResponse::setData($response);
$response
包含从http_post_data调用到CouchDB的响应。
有什么建议吗?这件事已经让我抓狂一天了。
谢谢。
http_post_data
应该接收一个assoc数组(不是字符串)作为选项。
你应该使用array('headers' => array('content-type' => 'application/json'))
而不是"Content-Type:application/json"