首先,这是我目前的系统:
我正在使用CouchDB和CouchDB-Lucene构建一个迷你搜索引擎。当用户输入查询时,我将POST发送到我的PHP脚本,然后查询couchdb-lucene。然后Couchdb-lucene将匹配的文档密钥列表返回给PHP脚本。然后,我将数据(使用http_post_data)发布到具有该键列表(detailed here,在“查询选项”下)的列表函数中。此列表函数返回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"}
我为此视图生成的网址是正确的。我可以将我的POST调用改为
http_post_data(url/of/view, $key_string, "Content-Type:application/json");
但实际上不会返回任何内容(我正在查看Firebug中的输出)。要发回我的结果,这里是相关的PHP:
HttpResponse::setContentType("application/json");
HttpResponse::setData($response);
$response
包含来自对CouchDB的http_post_data调用的响应。
有什么建议吗?这让我疯狂了一天,现在有点疯狂。
感谢。
答案 0 :(得分:3)
http_post_data
应该接收选项的关联数组(不是字符串)。
您应该使用array('headers' => array('content-type' => 'application/json'))
代替"Content-Type:application/json"