9

出于某种原因,facebook 爬虫在我的 rails 操作中触发了 json 响应。这会导致该操作仅返回对象的 json 表示,而没有正常的 html 标记 + 打开图形标记。我已经用 rails 3.2.6 对此进行了测试。我使用 facebook 打开图形调试器来查看刮板所看到的内容:http: //developers.facebook.com/tools/debug

代码非常简单。想象一个对象的简单“显示”动作,例如用户。它以:

respond_to do |format|
  format.js { render :json => @this.to_json }
  format.html
end

facebook 爬虫正在触发 format.js,这会导致打开的图形标签不被呈现。任何想法为什么会发生这种情况或如何解决它?谢谢。

4

2 回答 2

17

好的,所以 Facebook 发送了一个接受标头

*/*

由于没有请求特定的格式,因此 rails 只是按顺序进入 respond_to 块。如果您首先在 response_to 块中列出您的 js,如下所示,rails 将使用 JSON 响应 Facebook 开放爬虫,这将不起作用:

respond_to do |format|
  format.js { render :json => @this.to_json }
  format.html
end

只需切换顺序,默认情况下 rails 会以 HTML 响应:

respond_to do |format|
  format.html
  format.js { render :json => @this.to_json }
end

我不确定为什么 Facebook 没有指定他们正在寻找的格式……对我来说似乎很愚蠢。希望这对未来的人有所帮助。

于 2012-06-20T13:58:56.310 回答
2

检查 Facebook 爬虫发送的 HTTP 请求标头——尤其是Accept标头。

很可能是它们发送了一个值,让您的应用程序认为它必须发送与正常 HTML 输出不同的东西。

于 2012-06-20T07:53:45.010 回答