ActionController的:: UnknownFormat与format.js的Ajax实现(轨道4)轨道、UnknownFormat、ActionController、format

2023-09-11 00:36:01 作者:天大地大爸妈最大

我尝试使用Ajax在我使用Rails 4.应用程序发送我的js给客户端使用:

 的respond_to办|格式|
        format.js
   结束
 

在我的控制器。 但它产生的错误的ActionController :: UnknownFormat我在我的控制器。 有人能帮助我吗?

main_controller.rb:

 类Oweb :: MainController<的ApplicationController
    高清指数
        .....
    结束
    高清setmagasinstatus
      开始
       @mag = Magasin.find(PARAMS [:ID])
       如果@ mag.etatmagasin.lib =='Ouvert
            @ mag.etatmagasin = Etatmagasin.where(LIB:检录)。第一
       其他
            @ mag.etatmagasin = Etatmagasin.where(LIB:Ouvert)。第一
       结束
      营救的ActiveRecord :: RecordNotFound
       logger.error(试图访问无效MAGASIN#{PARAMS [:ID]})
       redirect_to_index(无效MAGASIN)
      其他
       @ mag.save
       @mags = Magasin.where(USER_ID:current_user.id)

       respond_to代码做|格式|
            format.js
       结束

     结束
    结束
结束
 

setmagasinstatus.js.erb:

  page.replace_html(bloc_magasin:部分​​=>中listmagasins:对象=> @mags)
 
jsp中form里action的路径

布局/ application.html.slim:

  DOCTYPE HTML
HTML
    头
        元字符集=utf-8
        META HTTP-当量=X-UA-Compatible的内容=IE =边缘
        META NAME =视口内容=WIDTH =装置宽度,初始规模= 1.0
        META NAME =说明内容=
        META NAME =作者内容=

        标题=收益率(:标题)

        = stylesheet_link_tag应用程序
        = csrf_meta_tags

    体
     .........
                =产量

        = javascript_include_tag应用程序
        =产量:脚本
 

的Gemfile:

 来源https://rubygems.org
#捆绑边缘轨道,而不是:创业板轨,github上:导轨/导轨
创业板导轨,4.1.1

组:发展做
  创业板mysql2
结束
组:生产做
  创业板PG
结束

创业板上海社会科学院护栏,GT〜&; 4.0.3

创业板uglifier','> = 1.3.0'

创业板咖啡轨,GT〜&; 4.0.0

创业板therubyracer',平台:红宝石


创业板的jQuery护栏

创业板turbolinks

创业板的JBuilder,GT〜&; 2.0

创业板SDOC','〜> 0.4.0,群:DOC

宝石'春天',群:发展

创业板色器件,G​​T〜&; 3.2.4

创业板超薄导轨,GT〜&; 2.1.4

创业板自举 - 萨斯,GT〜&; 3.1.1.1

创业板指南针护栏,GT〜&; 1.1.7

创业板simple_form,GT〜&; 3.0.2
创业板activeadmin,github上:gregbell / active_admin

创业板polyamorous,github上:ActiveRecord的-两轮牛车/ polyamorous

宝石'洗劫',github上:ActiveRecord的-两轮牛车/洗劫

创业板formtastic,github上:justinfrench / formtastic

 创业板调试,群:[:开发:测试:制作]

创业板地理codeR'
创业板gmaps4rails,GT〜&; 2.1.2
 

日志:

 入门使用/ oweb /主/ setmagasinstatus?ID = 3为192.168.56.1,在2014年8月1日6时22分○六秒+0000
处理由Oweb :: MainController#setmagasinstatus为HTML
  参数:{ID=>3}
已完成406不可接受在103ms

ActionController的:: UnknownFormat(ActionController的:: UnknownFormat):
  应用程序/控制器/ oweb / main_controller.rb:24:在'setmagasinstatus


  渲染/home/vagrant/.rvm/gems/ruby-2.1.1/gems/actionpack-4.1.1/lib/action_dispatch/middleware/templates/rescues/_source.erb (2.1ms)
  渲染/home/vagrant/.rvm/gems/ruby-2.1.1/gems/actionpack-4.1.1/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (2.2ms)
  渲染/home/vagrant/.rvm/gems/ruby-2.1.1/gems/actionpack-4.1.1/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb (1.1ms)
  渲染/home/vagrant/.rvm/gems/ruby-2.1.1/gems/actionpack-4.1.1/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb救援内/布局(27.1ms)
 

解决方案

捕获:

您的控制台日志说:

  

处理由Oweb :: MainController#setmagasinstatus 作为HTML

在你的控制器动作,你没有支持HTML响应。这就是为什么你面对的误差 UnknownFormat

解决方法:

添加格式:JS在你的Ajax调用。例如:

  $ AJAX网址:。/ oweb /主/ setmagasinstatus数据:ID ='+ ID,格式为:JS
 

i try to use Ajax in my application with Rails 4. To send my js to the client i use :

   respond_to do |format|
        format.js 
   end

in my controller. But it's generated error "ActionController::UnknownFormat" i my controller. Someone can help me please ?

main_controller.rb:

class Oweb::MainController < ApplicationController
    def index
        .....
    end
    def setmagasinstatus
      begin                     
       @mag = Magasin.find(params[:id]) 
       if @mag.etatmagasin.lib == 'Ouvert'
            @mag.etatmagasin = Etatmagasin.where(lib: 'Fermé').first
       else
            @mag.etatmagasin = Etatmagasin.where(lib: 'Ouvert').first
       end 
      rescue ActiveRecord::RecordNotFound
       logger.error("Attempt to access invalid Magasin #{params[:id]}")
       redirect_to_index("Invalid Magasin")
      else
       @mag.save
       @mags = Magasin.where(user_id: current_user.id) 

       respond_to do |format|
            format.js 
       end

     end
    end
end

setmagasinstatus.js.erb :

page.replace_html("bloc_magasin", :partial => "listmagasins", :object => @mags)

layouts/application.html.slim:

doctype html
html
    head
        meta charset="utf-8"
        meta http-equiv="X-UA-Compatible" content="IE=edge"
        meta name="viewport" content="width=device-width, initial-scale=1.0"
        meta name="description" content=""
        meta name="author" content=""

        title = yield(:title)

        = stylesheet_link_tag "application"
        = csrf_meta_tags

    body
     .........
                = yield

        = javascript_include_tag "application"
        = yield :scripts

gemfile:

source 'https://rubygems.org'
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.1.1'

group :development do
  gem 'mysql2'
end
group :production do
  gem 'pg'
end

gem 'sass-rails', '~> 4.0.3'

gem 'uglifier', '>= 1.3.0'

gem 'coffee-rails', '~> 4.0.0'

gem 'therubyracer',  platforms: :ruby


gem 'jquery-rails'

gem 'turbolinks'

gem 'jbuilder', '~> 2.0'

gem 'sdoc', '~> 0.4.0',          group: :doc

gem 'spring',        group: :development

gem 'devise', '~> 3.2.4'

gem 'slim-rails', '~> 2.1.4'

gem 'bootstrap-sass', '~> 3.1.1.1'

gem 'compass-rails', '~> 1.1.7'

gem 'simple_form', '~> 3.0.2'
gem 'activeadmin', github: 'gregbell/active_admin'

gem 'polyamorous', github: 'activerecord-hackery/polyamorous'

gem 'ransack', github: 'activerecord-hackery/ransack'

gem 'formtastic', github: 'justinfrench/formtastic'

 gem 'debugger', group: [:development, :test, :production]

gem 'geocoder'
gem 'gmaps4rails', '~> 2.1.2'

logs:

Started GET "/oweb/main/setmagasinstatus?id=3" for 192.168.56.1 at 2014-08-01 06:22:06 +0000
Processing by Oweb::MainController#setmagasinstatus as HTML
  Parameters: {"id"=>"3"}
Completed 406 Not Acceptable in 103ms

ActionController::UnknownFormat (ActionController::UnknownFormat):
  app/controllers/oweb/main_controller.rb:24:in `setmagasinstatus'


  Rendered /home/vagrant/.rvm/gems/ruby-2.1.1/gems/actionpack-4.1.1/lib/action_dispatch/middleware/templates/rescues/_source.erb (2.1ms)
  Rendered /home/vagrant/.rvm/gems/ruby-2.1.1/gems/actionpack-4.1.1/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (2.2ms)
  Rendered /home/vagrant/.rvm/gems/ruby-2.1.1/gems/actionpack-4.1.1/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb (1.1ms)
  Rendered /home/vagrant/.rvm/gems/ruby-2.1.1/gems/actionpack-4.1.1/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (27.1ms)

解决方案

Catch:

Your console log says:

Processing by Oweb::MainController#setmagasinstatus as HTML

In your controller action, you don't have supported HTML response. That's why you are facing error of UnknownFormat.

Solution:

Add format: "js" in your ajax call. For example:

$.ajax url: "/oweb/main/setmagasinstatus", data: 'id=' + id, format: 'js'