Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.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请求更新页面_Javascript_Ruby On Rails_Ruby On Rails 3 - Fatal编程技术网

Javascript 在Rails中通过ajax请求更新页面

Javascript 在Rails中通过ajax请求更新页面,javascript,ruby-on-rails,ruby-on-rails-3,Javascript,Ruby On Rails,Ruby On Rails 3,我在Rails3.2的一个显示页面上有一个交互式javascript图,该页面还包含一个链接到图中项目的标题。当用户单击图表中的项目时,我希望通过ajax请求更新页面,但我不希望重新加载图表。我以前没有实现过ajax请求,我不能说我完全理解web开发的新概念。然而,我读过一些关于turbolinks和pjax的文章,我的问题似乎与之相关,但我不知道如何实现这种方法 show.html.erb <% provide(:title, @item.name) %> <h2>

我在Rails3.2的一个显示页面上有一个交互式javascript图,该页面还包含一个链接到图中项目的标题。当用户单击图表中的项目时,我希望通过ajax请求更新页面,但我不希望重新加载图表。我以前没有实现过ajax请求,我不能说我完全理解web开发的新概念。然而,我读过一些关于turbolinks和pjax的文章,我的问题似乎与之相关,但我不知道如何实现这种方法

show.html.erb

<% provide(:title, @item.name) %>

<h2>
   <%= @item.name %> 
</h2>
…

我想我必须通过javascript代码中的ajax请求来更改实例变量@item。但是,我还想更新url,使其不仅仅是一个变量更改,而是一个url重定向。有什么建议吗

这不是一个可以用代码来回答的问题,因为实现您想要的东西的方法太多了,而没有足够的信息能够为您提供任何有意义的东西

您需要在服务器端代码和客户端代码之间进行区分。Ruby在服务器上执行,javascript在客户端浏览器中执行。因此,不能使用AJAX查询修改
@item
变量。您可以做的是编辑用AJAX呈现的HTML,但这本身就是值得几本书研究的主题

turbolinks和PJAX是AJAX的一个实现,它在单击链接时重新加载
标记(或您可以定义的部分)的全部内容,而不是执行正常的页面重新加载。这节省了大量时间,因为不会重新加载资产(javascript、样式表等)。这可能是你需要的,也可能不是你需要的,所以看看

在进一步讨论这一点之前,真正值得一读AJAX。我可以推荐一本书,书名是。这贯穿了构建Rails应用程序的整个过程,并在上面添加了AJAX甜点


然而,网上有很多资源。首先,了解Ajax在Rails之外的工作方式,然后开始在Google上搜索“Rails和Ajax”。

您将使用jQuery通过JavaScript修改DOM,而不是@item。我会在谷歌上搜索“javascript重定向”,看看会出现什么。谢谢。重定向不会重新加载整个页面吗?谢谢你的回答。我的想法是,点击图表中的某个东西与点击链接是一样的,然后可以使用TurboLink/pjax方法来实现这一效果,但这可能是错误的?看看,然后点击恐龙/外星人链接。那种东西能满足你的需要吗?如果是这样,请抓取他们的示例存储库并将其分开:)谢谢:)。这就是我想要的效果——我的“链接”是svg中的对象,我将试着深入挖掘。
localhost:3000/items/1