【问题标题】:HTTP/1.1 404 Not Found - jQuery POST request to Rails routeHTTP/1.1 404 Not Found - 对 Rails 路由的 jQuery POST 请求
【发布时间】:2015-01-04 22:16:15
【问题描述】:

我有一个自定义路由,在我的 Ruby on Rails 4 应用程序中,它通过 onChange() 函数处理通过 jQuery 发送的 post 请求。

目标网址是 http://0.0.0.0:3000/application/get_programs_for_center

这是我处理 POST 请求的 Rails 控制器

 post '/application/get_programs_for_center', to: 'school_applications#get_programs_for_center'

这里是调用此路由的 jQuery:

$("#school_application_fls_center").change(function(){
var center_id = document.getElementById("school_application_fls_center").value;
var formdata = {center: center_id}; 
$.ajax({
    url: "/application/get_programs_for_center",
    type: "POST",
    datatype: 'json',
    data: formdata,
    success: function(response){
      var options = $("#school_application_program"); 
      removeOptions(document.getElementById("school_application_program"));
      $.each(response.programs, function(i,item) {
        options.append($("<option />").val(response.programs[i].id).text(response.programs[i].name)); 
      });
    }
});
 });

它目前在 Chrome 中运行良好,但是在 Safari、Firefox 和 Opera 中我收到了这个 404 错误:

这是我的控制器代码:

def get_programs_for_center
 respond_to do |format|
  @school_application = SchoolApplication.find(session[:current_app_id])
  @select_program = @school_application.program
  center = params[:center]
  programs = Program.where(fls_center_id: center)
  msg = { :programs => programs, :message => "hurray", :program => @select_program} 
  format.json  { render :json => msg } 
 end 

结束

【问题讨论】:

  • 您是否尝试过将 ajax 中的 url 延长为 url: "http://0.0.0.0:3000/application/get_programs_for_center"
  • 显示处理这个请求的控制器代码。
  • @非常感谢你,我加了!
  • @cm92 添加绝对路径后,还是得到404。

标签: jquery ruby-on-rails post http-status-code-404


【解决方案1】:

所以我在 Rails 服务器日志中收到以下错误,抛出 404:

ActiveRecord::RecordNotFound (Couldn't find SchoolApplication without an ID):
app/controllers/school_applications_controller.rb:144:in `block in get_housing_options_for_center'
app/controllers/school_applications_controller.rb:137:in `get_housing_options_for_center'

然后被抛出,因为我试图获取一个尚未设置的会话变量(因此为什么它不能在与 Chrome 分开的所有其他浏览器上工作,其中会话变量像我一直在做的那样存储我的大部分开发都是通过那个浏览器进行的)。

 @school_application = SchoolApplication.find(session[:current_app_id])

因为没有设置变量所以抛出了一个错误,所以我用这个替换它:

  if session[:current_app_id]
    @school_application = SchoolApplication.find(session[:current_app_id])
  else
    @school_application = SchoolApplication.new() 
    session[:current_app_id] = @school_application.id
  end

我不再得到 404。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多