为了提高我网站的性能/响应能力,我使用 AJAX、replaceState、pushState 和 popstate 监听器实现了部分页面加载。
我基本上将页面 (HTML) 的中心部分存储为历史记录中的状态对象。单击链接时,我只从服务器请求页面的中心位(使用不同的 Accept header 标识这些请求)并将其替换为 javascript。在 popstate 上,我捕获之前的中央部分并将其推回 dom。
这大部分工作正常,但我发现了一个我遇到的特殊问题。解释起来有点复杂,如果不是很清楚,我深表歉意。
我们的大部分页面上都有一个搜索表单。通过 ajax 加载的部分页面仅针对 GET 请求,表单执行 POST 导致完整页面加载。
如果我浏览以下一组页面,我最终会看到一个格式不正确的部分页面,该页面仅包含中心内容,没有任何周围的 dom:
从主页开始(通过整页加载)- 执行搜索(post-redirect-get)
将您带到搜索结果(通过整页加载)- 然后单击主页
返回主页(通过动态获取)- 单击浏览器返回
搜索结果(来自 popstate 监听器)- 单击浏览器后退
主页格式错误。
当出现格式错误的主页时,我的 popstate 监听器根本不存在。
我认为正在发生的事情是,主页的第二次加载(动态的,部分的)被浏览器缓存,然后当整个页面返回时,浏览器只是显示缓存的部分响应而不是整个页面。
为了尝试解决这个问题,我在响应中添加了一个 Vary: Accept header ,让浏览器知道内容可能会根据 accept header 发生变化。我还在部分加载的内容中添加了 Cache-Control max-age=0、pragma no-cache 和过去的到期日期,以试图强制浏览器不对其进行缓存,但这些都没有解决它。
不幸的是,我的公司不允许外部流量到我们的开发服务器,所以我无法向您展示问题所在。我在这里查看了各种类似的问题,但没有一个看起来完全相同,建议的解决方案似乎也行不通。
如果我向我的动态 GET 请求添加一个无意义的参数 (blah=blah),问题就解决了。然而,这是一个我不想做的丑陋的 hack。这似乎应该可以通过 header 解决,因为我认为这是一个缓存问题。谁能解释一下这是怎么回事?
最佳答案
这是一个缓存问题。将响应 header Cache-Control 设置为 no-cache 或 max-age=0 后,问题不会在 FF 中发生(如您所说),但它仍然存在在 Chrome 中。
对我有用的 header 是 Cache-Control: no-store。这并不是所有浏览器都一致实现的(您可以找到询问无缓存和无存储之间有什么区别的问题),但在 Chrome 中也有您期望的结果。
关于带有部分页面加载的 HTML5 History API 后退按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11241263/
我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h
鉴于我有以下迁移:Sequel.migrationdoupdoalter_table:usersdoadd_column:is_admin,:default=>falseend#SequelrunsaDESCRIBEtablestatement,whenthemodelisloaded.#Atthispoint,itdoesnotknowthatusershaveais_adminflag.#Soitfails.@user=User.find(:email=>"admin@fancy-startup.example")@user.is_admin=true@user.save!ende
在我的Controller中,我通过以下方式在我的index方法中支持HTML和JSON:respond_todo|format|format.htmlformat.json{renderjson:@user}end在浏览器中拉起它时,它会自然地以HTML呈现。但是,当我对/user资源进行内容类型为application/json的curl调用时(因为它是索引方法),我仍然将HTML作为响应。如何获取JSON作为响应?我还需要说明什么? 最佳答案 您应该将.json附加到请求的url,提供的格式在routes.rb的路径中定义。这
所以我在关注Railscast,我注意到在html.erb文件中,ruby代码有一个微弱的背景高亮效果,以区别于其他代码HTML文档。我知道Ryan使用TextMate。我正在使用SublimeText3。我怎样才能达到同样的效果?谢谢! 最佳答案 为SublimeText安装ERB包。假设您安装了SublimeText包管理器*,只需点击cmd+shift+P即可获得命令菜单,然后键入installpackage并选择PackageControl:InstallPackage获取包管理器菜单。在该菜单中,键入ERB并在看到包时选择
我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("
我正在使用Rails构建一个简单的聊天应用程序。当用户输入url时,我希望将其输出为html链接(即“url”)。我想知道在Ruby中是否有任何库或众所周知的方法可以做到这一点。如果没有,我有一些不错的正则表达式示例代码可以使用... 最佳答案 查看auto_linkRails提供的辅助方法。这会将所有URL和电子邮件地址变成可点击的链接(htmlanchor标记)。这是文档中的代码示例。auto_link("Gotohttp://www.rubyonrails.organdsayhellotodavid@loudthinking.
我一直致力于让我们的Rails2.3.8应用程序在JRuby下正确运行。一切正常,直到我启用config.threadsafe!以实现JRuby提供的并发性。这导致lib/中的模块和类不再自动加载。使用config.threadsafe!启用:$rubyscript/runner-eproduction'pSim::Sim200Provisioner'/Users/amchale/.rvm/gems/jruby-1.5.1@web-services/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:105:in`co
我正在学习http://ruby.railstutorial.org/chapters/static-pages上的RubyonRails教程并遇到以下错误StaticPagesHomepageshouldhavethecontent'SampleApp'Failure/Error:page.shouldhave_content('SampleApp')Capybara::ElementNotFound:Unabletofindxpath"/html"#(eval):2:in`text'#./spec/requests/static_pages_spec.rb:7:in`(root)'
我们目前正在为ROR3.2开发自定义cms引擎。在这个过程中,我们希望成为我们的rails应用程序中的一等公民的几个类类型起源,这意味着它们应该驻留在应用程序的app文件夹下,它是插件。目前我们有以下类型:数据源数据类型查看我在app文件夹下创建了多个目录来保存这些:应用/数据源应用/数据类型应用/View更多类型将随之而来,我有点担心应用程序文件夹被这么多目录污染。因此,我想将它们移动到一个子目录/模块中,该子目录/模块包含cms定义的所有类型。所有类都应位于MyCms命名空间内,目录布局应如下所示:应用程序/my_cms/data_source应用程序/my_cms/data_ty
我正在尝试将一个简单的CSV文件读入HTML表格以在浏览器中显示,但我遇到了麻烦。这就是我正在尝试的:Controller:defshow@csv=CSV.open("file.csv",:headers=>true)end查看:输出:NameStartDateEndDateQuantityPostalCode基本上我只获取标题,而不会读取和呈现CSV正文。 最佳答案 这最终成为最终解决方案:Controller:defshow#OpenaCSVfile,andthenreaditintoaCSV::Tableobjectforda