1

首先,这是我当前系统的样子:

  • 沙发数据库 1.0.2
  • PHP 5.3.6
  • 阿帕奇 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)发布到带有该键列表的列表函数(详细信息在此处,在“查询选项”下)。此列表函数返回 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"}

我为此视图生成的 URL 是正确的。我可以将我的 POST 调用更改为

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 的响应。

有什么建议么?这已经让我发疯了一天又一点。

谢谢。

4

1 回答 1

3

http_post_data应该接收一个 assoc 数组(不是字符串)作为选项。

你应该使用array('headers' => array('content-type' => 'application/json'))而不是"Content-Type:application/json"

于 2011-07-10T03:25:58.120 回答