首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >JSON请求返回两个响应

JSON请求返回两个响应
EN

Stack Overflow用户
提问于 2012-08-28 02:53:43
回答 2查看 145关注 0票数 0

在我的rails应用程序中,我有一个有很多VersionsItem模型。我的控制器有一个versions动作。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def versions
  @item = Item.find(params[:id])
  respond_to do |format|
    format.json { render json: @item.versions }
  end
end

每当我请求版本时,有些条目会成功返回,有些则不会。但当我进入控制台时,我可以毫无问题地获取所有条目的版本。

成功(返回JSON版本数组):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Started GET "/api/versions/4.json?"
Processing by ItemsController#versions as JSON
Parameters: {"id"=>"4"}
Completed 200 OK in 106ms (Views: 0.1ms | ActiveRecord: 19.8ms)
app[web.1]: cache: [GET /api/versions/4.json?] miss
heroku[router]: GET x.x.com/api/versions/4.json? dyno=web.1 queue=0 wait=0ms service=113ms status=200 bytes=831

不成功(返回两个响应,均为200状态,无JSON数据):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Started GET "/api/versions/1.json?"
Processing by ItemsController#versions as JSON
Parameters: {"id"=>"1"}
Completed 200 OK in 249ms (Views: 0.1ms | ActiveRecord: 162.9ms)
app[web.1]: cache: [GET /api/versions/1.json?] miss
heroku[router]: GET x.x.com/api/versions/1.json? dyno=web.1 queue=0 wait=0ms service=257ms status=200 bytes=3540

你知道这是什么原因吗?我不知道如何在Heroku上记录SQL,所以我没有想法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-28 05:34:01

这实际上是客户端的一个错误。在iOS上,我在connection:didReceiveData:中处理返回的数据,它(在返回大块数据时)被多次调用,结果是不完整的。为了解决这个问题,我将该回调中的所有部分结果连接起来,并在connectionDidFinishLoading:中处理数据。愚蠢的错误,与Heroku或Rails无关。

谢谢你的帮助克雷格。

票数 0
EN

Stack Overflow用户

发布于 2012-08-28 02:58:55

重新启动SQL日志记录:在打开每个连接时发出SQL SET log_statement='all';来启用语句日志记录。然后检查Pg的Heroku日志,看看发生了什么。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
heroku logs --ps postgres

请参见:

这不会记录查询结果,只会记录查询文本、查询参数和错误/成功。

要处理结果日志,您需要在您的应用程序中进行;只需将消息打印到stderr,Heroku会将它们添加到应用程序日志中,这样您就可以通过heroku logs获取它们。

无论如何,您当前的代码看起来不可靠。循环遍历结果集并发出json感觉是错误的:

  • 不清楚只能有一个结果,因此只能发出一个json块;和
  • 如果没有结果,则不发出json

相反,将查找的结果保存到一个变量中。然后正确处理丢失的结果:在RPC中,您可能会报告RESTful状态404 Not Found;在更具RPC式风格的API中,您将返回一个空的JSON文档,或者返回一个带有某种“未找到”标志的JSON文档,并报告200 OK状态。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12152188

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文