Rails控制器方法不会在AJAX帖子上触发

时间:2014-08-11 06:24:11

标签: jquery ruby-on-rails ruby

我正在尝试保存数据库AJAX中的值。问题是我的控制器操作在执行AJAX时没有触发,并且没有收到正在发送的数据。此外,AJAX调用正在执行成功和错误方法。

我的控制器' ServerManagementController'有行动,

def read_data         
  @responseArray = JSON.stringify(params[:response])
  @responseArray.length  
  UserServer.makeUserServerRecord #This stores dummy values in the database
end

这是AJAX,

$.ajax(
            {
             url: "/server_management/read_data",
             type: "POST",
             data: JSON.stringify(response),  
             dataType: "json", 
             contentType: 'application/json',
             success: alert("sent"),
             error: alert("failed")
            }
          );

我已将路线定义为

resources :server_managements do
  collection do
    post 'read_data'
  end
end

我被困在这两天,任何帮助都会受到赞赏。

2 个答案:

答案 0 :(得分:0)

在您的控制器中,您需要将json渲染为响应:

def read_data
  @responseArray = params[:response]
  @responseArray.length  
  if UserServer.makeUserServerRecord
    render json: {status: "ok"}
  else
    render json: {status: "false"}
  end
end 

Ajax应该是这样的:

type: 'POST',
  datatype: 'json',
  url: '/server_managements/read_data/',
  success: function(status){
    if (status.success === true) {
      alert("sent");
    }else{
      alert("failed");
    }
   }

让我知道是的。

答案 1 :(得分:0)

如果未调用此操作,您可能会从以下方面受益:

-

<强>后端

#config/routes.rb
resources :server_management do
  collection do
    post :read_data #-> domain.com/server_management/read_data
  end
end

我认为您的一个主要问题是,您是否未将正确的数据发送到ServerManagementController,无论您是否与控制器本身有任何其他问题

#app/controllers/server_management_controller.rb
Class ServerManagementController < ApplicationController
   def read_data
      ...
      respond_to do |format|
        format.json { render json: "Response".to_json }
      end
   end
end

这允许您定义JSON请求的响应,使您能够定义运行它所需的文件。处理状态/成功取决于您支持的UserServer代码

-

<强>的Ajax

仅当您的ajax请求未到达控制器/端点(error等)时,才会调用ajax 404函数。根据{{​​1}}的说法,您将要执行以下操作:

zauzaj

我也曾经认为,当存在真正的问题时,会发生Ajax错误回调。不是这样 - 当请求未到达您指定的端点时,它只

如果您想使用Ajax处理任何异常,您需要在$.ajax({ url: "/server_management/read_data", type: "POST", data: JSON.stringify(response), dataType: "json", success: function(data) { alert("sent"); }, error: function(data) { alert("failed") } }); 回调中做出决定;至少从我的经验来看。