【问题标题】:JSON shown instead of HTML for rails view using ember.js使用 ember.js 显示 JSON 而不是 HTML 用于 Rails 视图
【发布时间】:2012-06-14 22:01:39
【问题描述】:

我正在慢慢地将我的 rails 网站从传统的 rails 往返每个视图的应用程序转移到最终将基于单页 ember.js 的应用程序。作为此迁移的一部分,我分步进行,而不是一次性将整个应用程序迁移到单个页面应用程序,而是首先逐节迁移。

我被一个看似普遍的问题难住了。当我对 JSON 视图和 HTML 视图使用相同的控制器时,在 Chrome 中按回键偶尔会显示 JSON 视图而不是 HTML 视图。

例如,我有一个端点 /portfolio/13,它是这些部分 ember.js 应用程序之一的入口点,它会导致 Ember Data 在同一端点上提取 ID 为 #13 的 Portfolio 的 JSON使用 application/json 作为 Accept: 标头。向前导航到更深的页面后按返回将获得页面的 JSON 表示,而不是 HTML。

我是否需要强制 Ember Data 使用格式参数以使 JSON 版本位于不同的 URL?如果是这样,如何做到这一点?

我做错了什么?

【问题讨论】:

  • 我可以通过将 buildURL 中 Ember 数据源中的 url.push(suffix) 调整为 url.push(suffix + ".json") 来“解决”这个问题,但显然这并不理想。
  • 您需要监控并描述当您点击返回按钮以产生不需要的行为时在 HTTP 级别发生的情况。可能是您在检索资源时遇到了某种缓存问题吗?完整的 HTTP 跟踪应该会显示所有内容。
  • 我肯定遇到了缓存问题。 Chrome 正在返回缓存的 JSON 版本而不是 HTML 版本。
  • 您能否使用 HTTP GET 请求(包括所有标头)更新您希望检索 HTML 表示的请求的问题?
  • 我可以通过将 url.push(suffix) 调整为 url.push(suffix + ".json") 来“解决”这个问题 - 这将是明智的解决方案,因为 URL 将保持一致,并且仍然可以缓存。

标签: ruby-on-rails ember.js ember-data


【解决方案1】:

尝试在你的 Javascript 中添加这个:

$.ajaxSetup({cache: false});

它应该可以解决问题。但是,这里有些问题,因为默认情况下浏览器不缓存 JSON。这可能是因为内容类型错误,即 Rails 将 JSON 提供为 HTML。

【讨论】:

【解决方案2】:

您是否在您的 Rails 应用程序中将某些标头设置为“application/json”?您能否跟踪网络响应标头并查看内容类型:值?

“整个”页面是否显示为 JSON? (意思是不解析 HTML)

我曾经在使用 sinatra 时遇到过这个问题,但我遇到了一个(非常愚蠢的):

before do 
    content_type 'application/json'
end

如果您希望浏览器正确显示,则所有 HTML 页面都必须为“text/html”。

这可能是您的 Rails 应用程序中某些地方的问题。 (但是为什么在ember之前没有遇到这个问题呢?)

【讨论】:

  • 抱歉 - 我应该说我得到的是资源的 JSON 版本,而不是页面的 HTML 版本(具有相同的 URL)。也许我需要强制 Ember Data 使用格式参数,以便 JSON 版本位于不同的 URL?如果是这样,有人知道该怎么做吗?
猜你喜欢
  • 2016-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-08
  • 1970-01-01
  • 2019-12-07
  • 1970-01-01
  • 2012-09-08
相关资源
最近更新 更多