ActionController :: UnknownFormat with format.js for ajax implementation(Rail 4)

 手机用户2502930417 发布于 2022-12-31 10:49

我尝试使用Rails 4在我的应用程序中使用Ajax.要将我的js发送到客户端,我使用:

   respond_to do |format|
        format.js 
   end

在我的控制器中.但是我的控制器产生了错误"ActionController :: UnknownFormat".有人可以帮帮我吗?

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)

布局/ application.html.slim:

doctype html
html
    head
        meta charset="utf-8"
        meta http-equiv="X-UA-Compatible" content="IE=edge"
        meta name="viewport" content="
        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'

日志:

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)

RAJ.. 12

抓住:

你的控制台日志说:

由Oweb :: MainController#setmagasinstatus处理为HTML

在您的控制器操作中,您没有受支持的HTML响应.这就是你面临错误的原因UnknownFormat.

解:

添加format: "js"你的ajax调用.例如:

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


alishir.. 11

如果你可以使用link_to辅助函数调用你的控制器的动作,在你的情况下Oweb::MainController#setmagasinstatus添加:remote => truelink_to帮助器将解决问题.

例如,如果您有一个指向您的操作的链接并希望在ajax中获得响应,则以下代码将创建指向该操作的链接:

<%= link_to your_link_name, setmagasinstatus_path(:params), :remote => true %>

这是一个简单易行的样本https://coderwall.com/p/kqb3xq/rails-4-how-to-partials-ajax-dead-easy

3 个回答
  • 抓住:

    你的控制台日志说:

    由Oweb :: MainController#setmagasinstatus处理为HTML

    在您的控制器操作中,您没有受支持的HTML响应.这就是你面临错误的原因UnknownFormat.

    解:

    添加format: "js"你的ajax调用.例如:

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

    2022-12-31 10:53 回答
  • 如果你可以使用link_to辅助函数调用你的控制器的动作,在你的情况下Oweb::MainController#setmagasinstatus添加:remote => truelink_to帮助器将解决问题.

    例如,如果您有一个指向您的操作的链接并希望在ajax中获得响应,则以下代码将创建指向该操作的链接:

    <%= link_to your_link_name, setmagasinstatus_path(:params), :remote => true %>

    这是一个简单易行的样本https://coderwall.com/p/kqb3xq/rails-4-how-to-partials-ajax-dead-easy

    2022-12-31 10:53 回答
  • HTML

    看起来问题是您是HTML出于任何原因发送请求:

    Oweb :: MainController#setmagasinstatus as HTML

    因此,我推测"未知格式"错误是由于您的动作中缺少htmlmime类型的定义所致.我想这可以解决表面级别的错误:

     respond_to do |format|
         format.js 
         format.html
      end
    

    阿贾克斯

    如果以上是正确的,那么问题就转向"为什么要发送HTML mime类型?"

    由于不能够看到实际的Ajax代码,我建议这个问题将要么是你只是发送一个标准的HTTP请求(Ajax是XHR); 或者你对ajax请求的声明有问题

    您必须记住,Ajax(异步Javascript和XML)旨在代表您发送请求 - 就像伪浏览器一样.这意味着如果你想发送ajax请求,它必须通过Javascript(因此format.jsmime类型处理程序)完成

    -

    就我个人而言,我认为你并没有发送一个ajax请求,虽然它也可能是你发送的不同dataType,例如JSON

    2022-12-31 10:53 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有