Tag: ajax

Ruby on Rails阻止Turbolinks劫持AJAX操作

我正在按照RoR入门指南进行操作并添加一些内容。 具体来说,我想要实现的是,在步骤5.13删除文章中 ,我使用AJAX而不是使用标准模式删除了一篇文章。 我想以最符合RoR做事方式的方式这样做。 阅读使用Rails章节中的JavaScript后 ,以下步骤似乎是要走的路: 将属性remote: true添加到link_to帮助程序(请参阅代码段A) 通过添加data: {turbolinks: false}禁用turbolinks这个link_to帮助data: {turbolinks: false} (参见代码片段A) 向控制器添加一些逻辑,确保返回JSON(参见代码片段B)。 添加侦听ajax:success事件的JavaScript,然后将项目设置为动画(请参阅代码段C)。 片段A. ‘remove-article’ %> 代码片段B. def destroy @article = Article.find(params[:id]) respond_to do |format| if @article.destroy format.html { redirect_to articles_path } format.json { render json: @article } else format.html { render action: “index” } format.json { render json: @article.errors, status: :unprocessable_entity […]

使用Rails,jquery和best_in_place gem进行就地编辑

我有一个任务列表应用程序,其中任务按类别显示。 我在两个地方列出了类别。 我允许使用best_in_place gem就地编辑类别名称。 我工作得很好。 我的问题是,因为我在两个地方都有类别名称而且我只是在原地编辑了一个类别,我需要在表单提交后使用新名称更新未编辑的名称的另一个外观。 刷新/重新加载受影响类别名称的最佳方法是什么? 谢谢。

如何处理rails 3中基于ajax的子组件?

我正在重构rails 3应用程序,并想知道如何最好地处理基于ajax的子组件? 我有一个’仪表板’控制器。 这是通过’dashboard#show’动作呈现的。 我现在想要一个基于ajax的’tabs’组件,它是仪表板的一部分。 我有两种可能的解决方案: 解决方案1:将标签组件实现为动作,例如’dashboard#tabs’(这是我目前的解决方案)。 这给了我丑陋的帮手: tabs_dashboard_path 解决方案2:将其实现为嵌套资源,例如’dashboard / tabs#show’。 这将给出很好的命名助手,例如: dashboard_tabs_path 记住我有很多其他ajax组件什么是最好的行动方案? 如果我使用解决方案2,我的资源将变得非常嵌套,并且他们只会有一个“显示”动作; 这对我来说似乎有点过于冗长。 例如,路线将被指定为: resource :dashboard, :only => [:show], :controller => “users/dashboard” do resource :tabs :only => [:show], :controller => “users/dashboard/tabs” do resource :steps :only => [:show], :controller => “users/dashboard/tabs/steps” #etc…. end end 有没有一个很好的轨道方式来处理这个?

Rails使用JSON对象呈现部分

在我的rails应用程序中,我创建了一个javascript回调函数,用于轮询处理端点以检查图像是否已完成处理,然后更新视图,如下所示: create.js.erb 创建回调 // start polling for processed image function imageProcessed() { $.ajax({ url: “/posts/” + + “/processing”}) .done(function(data) { if (data.processing) { setTimeout(imageProcessed(), 2000); } else { // append image url when processed $(“#js-capture-container”).html(”); } }); } imageProcessed(); posts_controller.rb 端点 def processing data = { processing: @post.image_processing } if !@post.image_processing? data[:image_url] = @post.image_url(:pair) end […]

没有Id:Rails 4自定义控制器动作,找不到

我正在尝试为某些数据创建一个JSON提要,以便将其部署到我所拥有的图形中。 我一直遇到“找不到没有Id的大坝”,而且没有任何关于SO的答案似乎都有解决方法。 我的参数似乎正在通过罚款,我有点困惑。 的routes.rb require “resque/server” Rails.application.routes.draw do mount Resque::Server, :at => “/resque” root ‘home#index’ get ‘about’, to: ‘home#about’ resources :dams, only: [:index, :show] do get ‘count_data’, to: ‘dams#count_data’ resources :fish_counts, only: [:index, :show] end resources :fish end dams_controller.rb中的自定义操作: def count_data @dam = Dam.includes(:fish_counts, :fish).friendly.find(params[:id]) @fish_counts = FishCount.for_year(Date.today.year).where(“dam_id =?”, @dam.id).limit(200).order(count_date: :desc) respond_to do |format| format.json […]

动态地将params插入到Rails中的link_to

在我的主页中,我有一个输入框,用户可以在搜索查询中输入。 然后我有一个link_to,它将使用搜索查询向不同的页面(搜索页面)发出get请求。 按照设计,我不能使用Rails form_for。 在检测到输入框中的更改后,如何将查询动态插入“link_to”? 这是一个模拟: %input{:type => “text”, :id => “my_input”} = link_to “Search”, posts_path(query: “my_query_here”) :javascript $(function(){ $(“#my_input”).change(function() { … do something here … }); }); 谢谢。

如何关闭仅用于json的rails protect_from_forgeryfilter

我有使用Rails3构建的网站,现在我想为移动客户端访问实现json API。 但是,由于protect_from_forgeryfilter,从客户端发送json post请求。 因为客户端不会从服务器检索任何数据,所以客户端无法接收auth_token,因此我只想为json请求关闭protect_from_forgery选项(我认为rails3在默认情况下执行此操作,但显然它没有) 。 我知道在这里讨论类似的主题,但在这种情况下,他在发送post请求之前收到auth_token。 所以我的问题是只关闭json的protect_from_forgery是这样做的好方法吗? 如果是,怎么办? 如果不是,还有什么选择? 仅供参考,我使用以下ajax请求 $.ajax({ type: ‘POST’, url: “http://www.example.com/login.json”, data: { ’email’: emailVal, ‘password’: passwordVal }, success: onSuccess, error: onError, dataType: “json” }); 我得到ActionController :: InvalidAuthenticityToken错误。 顺便说一句,遵循curl命令工作虽然… curl -H“Content-Type:application / json”-c cookies.txt -d'{“email”:emailVal,“password”:passwordVal}’-X POST http://www.example.com/login.json -一世

Rails:不是ember,不是JS响应,而是介于两者之间

我正在开发一个标准的rails应用程序,到目前为止我还没有使用任何AJAX,只是很好的HTML。 我的计划是迭代地添加“远程”链接以及所有这些东西并支持JS响应,因为我知道生成JS服务器端非常非常邪恶,但我发现它非常方便,简单,快速和它使应用程序足够活泼,i18n开箱即用。 使用纯JSON方法会更轻,但需要大量客户端编码。 现在想象一下,在这个应用程序中,用户有一个邮箱,并且由于他们可以在不重新加载页面的情况下完成大部分甚至所有操作,因此邮箱计数器永远不会更改,除非他们手动刷新页面。 所以,问题出现了:哪种方法最好? 我想过使用Ember(用于数据绑定),并通过某种用于ruby的把手实现与rails共享视图。 这对于开发人员来说非常棒,但不是很透明(我)。 虽然我猜我只需要编写将由ember使用的把手视图,其余的仍然可以用原始格式编写,不是吗? 另一个选择可能是使用某种事件系统(可能是EventSource?),并且只是方便地使用JS视图方法,并听取这些事件。 我想这些应该是JSON对象,并且必须对客户端进行编码才能处理它们。 这看起来有点麻烦,我需要一个heroku(faye?)的解决方案,这是我的应用程序托管的地方。 任何提示? 我认为ember方法更强大,但似乎也很复杂,我不想重复自己的服务器和客户端。 编辑: 我已经看到了这个 ,或多或少是选项#2。

从多个CKEditor内联编辑器字段中保存数据,如模板

我正在建立一个模板系统,设计师可以提交HTML5设计,并允许用户添加自己的内容。 我正在为应用程序使用CKEditor 4.2和Rails 3。 我希望用户能够加载模板页面,然后直接编辑各种内联编辑器,然后通过JS和Ajax保存。 我有一切工作,但在添加iFrame插件时,我遇到了一些格式问题,因为我只是将原始HTML从内联编辑器保存到我的模板。 有关详细信息,请参阅此问题: CKEditor和iFrame / YouTube /其他嵌入式插件显示奇怪的HTML代码 我现在知道我应该使用类似的东西: var data = CKEDITOR.instances.editable.getData(); 但是,我如何管理这样的多个编辑器? 我告诉我的设计师只需使用 contenteditable=”true” 对于他们想要编辑的任何div。 因此,我没有id为每个编辑器引用,也不知道每个模板文件将包含多少编辑器我希望能够在最终模板中保存不可编辑的内容,当然还有可编辑的内容,这只是一个HTML5页面。 这是我必须使用id为div的div保存整个模板文件的原始内容的解决方案: $saveButton.click(function(e) { // Extract contents of magboy container var contents = $(“#page-cnt”).html(); // Send contents to server $.ajax({ url: ‘/pages/’+PageId+’/editor_save’, type: ‘POST’, data: { containerContents: contents }, success: function(response){ alert(“contents saved”); } }); […]

“警告:无法validationCSRF令牌真实性”错误 – 使用Devise的CORS和:token_authenticatable

我有一个单页面应用程序使用CORSvalidation到另一个域。 所有请求都是JSON请求。 我的应用程序可以validation确定,可以使GET请求正常。 身份validation使用token_authenticatable。 即所有请求附加’?auth_token = whatever’ 所以,我的实际问题是,当我尝试执行PUT请求时,我得到一个警告:无法在rails日志中validationCSRF令牌真实性消息以及CanCan :: AccessDenied(您无权访问此页面。 )例外。 只需将skip_before_filter :verify_authenticity_token添加到rails控制器即可解决问题。 因此,我只能得出结论,我的ajax请求发送的是无效或空的csrf_token。 我真的不明白这是怎么回事,因为我相信我正确地发送了每个ajax请求的X-CSRF-Token报头。 基本上,我的应用程序validation并且Devise发送回auth_token和csrf_token: render :status => 200, :json => { :auth_token => @user.authentication_token, :csrf_token => form_authenticity_token } 然后我在我的ajax应用程序中存储这些标记,并在jQuery中使用ajaxSend ,设置它以便jQuery通过每个请求传递这些标记: initialize: -> @bindTo $(document), ‘ajaxSend’, @appendTokensToRequest appendTokensToRequest: (event, jqXHR, options) -> if not @authToken? then return if @csrfToken? jqXHR.setRequestHeader ‘X-CSRF-Token’, @csrfToken if options.type […]