Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在rails ajax请求中使用history.pushState_Javascript_Ruby On Rails_Ajax - Fatal编程技术网

Javascript 在rails ajax请求中使用history.pushState

Javascript 在rails ajax请求中使用history.pushState,javascript,ruby-on-rails,ajax,Javascript,Ruby On Rails,Ajax,我正在一个应用程序中处理一个消息部分,在history.pushState中遇到一些问题。基本上,我有两个视图,一个列出所有线程,另一个显示单个线程。当用户单击一个线程(链接设置为remote=true)时,rails将使用我的show.js.erb文件进行响应。此文件包括 $("#layout-body").html("<%=j render :partial => 'thread' %>"); if (Modernizr.history) { history

我正在一个应用程序中处理一个消息部分,在history.pushState中遇到一些问题。基本上,我有两个视图,一个列出所有线程,另一个显示单个线程。当用户单击一个线程(链接设置为remote=true)时,rails将使用我的show.js.erb文件进行响应。此文件包括

    $("#layout-body").html("<%=j render :partial => 'thread' %>");
    if (Modernizr.history) { history.pushState("test: testy", null, "<%=j raw message_thread_url(params) %>"); }
$(“#布局体”).html(“'thread'>”);
if(modernizer.history){history.pushState(“test:testy”,null,”);}

当前,当单击线程时,url会正确更新为/messages/ID。但是,当我点击后退按钮时,url会更改为/messages,但页面内容不会更改。我该如何着手使这项工作?我这样做对吗?

您必须响应
popstate
事件

window.addEventListener("popstate", function(e) {
    console.log(location.pathname);
});

是的,我读过一些关于这方面的文章,但我对js的理解是有限的&我不知道在触发popstate事件时如何使用它来更新页面。我可以很好地更新url,但页面内容要么相同,要么乱七八糟。当触发
popstate
事件时,您必须更改页面内容。它不像正常的后退按钮操作那样是自动的。谢谢你的回复,但这仍然不能回答我关于如何实际更改页面内容的问题。我不知道如何才能更清楚。当使用HTML历史记录时,它为您提供了一个工具,但您必须管理实际的页面更改。让我举一个简单的例子:假设页面上有选项卡。更改选项卡时,将选项卡名称推送到url上。为了确保下一次页面刷新时,您可以检查url并查看哪个选项卡应为当前选项卡(但您,代码,必须切换到该选项卡)。同样,当捕捉到弹出状态时,您将获得url,您必须解析url以知道切换到哪个选项卡。这更清楚一点吗?谢谢,这更清楚一点,我只是不知道技术上如何让它工作。我是否只是在popstate事件中添加了一个javascript重定向(例如window.location=location.pathname)?否则,我需要一个单独的popstate功能为网站的每个部分,对吗?