浏览器有时会显示JSON文本而不是所需的页面

我在Rails应用程序中遇到了一个间歇性问题,而且我无法弄清楚发生了什么。 当用户登录时,他们会看到一个仪表板,其中包含一些JavaScript代码,用于对操作执行AJAX调用。 有时,当用户登录时,他们不会看到仪表板,而是从操作而不是仪表板(在Chrome中)看到JSON响应文本,或者他们下载.json文件(Firefox)。 它是间歇性的,通常不会发生,但它确实发生时真的很烦人。

这是一些代码的愚蠢版本:

JS在模板头中运行:

$(function () { var remoteLink = $('#remoteLink'); remoteLink.live("ajax:complete", function () { setTimeout(function () { loadCount(); }, 30000); }); loadCount(); function loadCount() { remoteLink.click(); } }); 

以及模板中的链接:

  'something', :action => 'count'}, :id => 'remoteLink', :class => 'hidden', :remote => true, 'data-type' => 'json' %> 

和控制器动作:

 def count render :json => get_counts_function_returning_a_hash end 

我的预感是,它是一种竞争条件 – 可能与使用setTimeout有关? – 但我无法证实这种预感。 谁能告诉我这里可能会发生什么? 我也在其他网站上看到过这种情况 – 也是断断续续的,一般不会发生但是当它发生时很烦人。

您是否有任何使用store_location或类似function的身份validation代码在用户登录后将用户重定向到特定页面?

我曾经遇到类似的问题,其中AJAX回调导致store_location存储JSON URL,并且用户被重定向到JSON响应而不是他们的仪表板。 这很难追查,因为在错误显现之前,用户必须在页面闲置一段时间。

在任何情况下,我怀疑它是这样的,而不是Rails的问题。

我怀疑HTTP响应的Content-Type并检查您为可能的错误设置的任何地方。 使用扩展名运行浏览器以跟踪HTTP标头,以捕获发生这些值时的值。