AJAX 调用不起作用,查找错误的操作

AJAX call not working, looking for the wrong action?

本文关键字:错误 操作 查找 调用 不起作用 AJAX      更新时间:2023-09-26

我希望在按下按钮时将 AJAX 调用发送到我的events_controller#check操作。这是我的代码:

events'ew.html.erb

<button id="check-button" type="button">Check</button>

应用.js:

$(document).on('click', "#check-button", function(){
    var checkList = []; //creates array to store customer ids
    ...
    });
    $.ajax({
            url: '/events/check',
            data:checkList
        }
    )
});

events_controller#检查

def check
    checkList = params[:checkList]
    ...
end

路线.rb

post 'events_controller/check' => 'events#check'

单击按钮时,我在控制台中收到此错误:

Started GET "/events/check?undefined=" for 127.0.0.1 at 2016-02-03 11:36:33 +0000
AbstractController::ActionNotFound (The action 'show' could not be found for EventsController):
  actionpack (4.1.8) lib/abstract_controller/base.rb:131:in `process'
  actionview (4.1.8) lib/action_view/rendering.rb:30:in `process'
  actionpack (4.1.8) lib/action_controller/metal.rb:196:in `dispatch'
  actionpack (4.1.8) lib/action_controller/metal/rack_delegation.rb:13:in `dispatch'
  actionpack (4.1.8) lib/action_controller/metal.rb:232:in `block in action'
  actionpack (4.1.8) lib/action_dispatch/routing/route_set.rb:82:in `call'
  actionpack (4.1.8) lib/action_dispatch/routing/route_set.rb:82:in `dispatch'
  actionpack (4.1.8) lib/action_dispatch/routing/route_set.rb:50:in `call'
  actionpack (4.1.8) lib/action_dispatch/journey/router.rb:73:in `block in call'
  actionpack (4.1.8) lib/action_dispatch/journey/router.rb:59:in `each'
  actionpack (4.1.8) lib/action_dispatch/journey/router.rb:59:in `call'
  actionpack (4.1.8) lib/action_dispatch/routing/route_set.rb:678:in `call'
...etc

为什么它试图找到动作"显示"而不是"检查"?我该如何解决这个问题?谢谢

2 个问题:

  1. 您可能在声明的路线之前已经resources :events了(为什么它会show
  2. 您尚未调用 POST 方法

您应该具备以下条件:

#config/routes.rb
resources :events do 
   post :check, on: :collection #-> url.com/events/check
end
#app/assets/javascripts/application.js
$(document).on('click', "#check-button", function(){
   var checkList = []; //creates array to store customer ids
   ...
   $.ajax({
     url: '/events/check',
     data: checkList,
     method: "POST"
   });
});
在我看来

,当请求中缺少类型时,需要发布请求,因此它会将GET请求作为默认请求方法。

您需要向 ajax 添加type

type:'post',

1 检查页面中是否正确导入了 Jquery 文件。

  <script type = "text/javascript" src = "http://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
   $.ajax({
      url: '/events/check', // Check URL is correct
      cache: false,
      success: function(html){
        //TO DO Action
      }
    });
  1. 检查您应用的网址值是否正确。 然后使用以下代码。