【问题标题】:Ajax call is returning error from action controller in railsAjax 调用从 Rails 中的动作控制器返回错误
【发布时间】:2013-10-19 17:40:29
【问题描述】:

在更改下拉列表值时,我正在尝试填充其他下拉列表值。

我在 routes.rb 中添加了我的新操作:

 resources :appointments do 
    collection do
      get :getdata
    end
  end

这是我的 js 代码:

 $("#appointment_department_id").change(function(){ 
//on change of department dropdown.
    $.ajax({
      url: "/appointment/getdata",
      type: "GET",
      data: {department_id: $(this).val()},
      success: function(data){
        alert(data);
      }
       error: function(data){
        alert(data);
      }

     });
  });

这是我在控制器文件中的操作:

   def getdata
     @dept_id = params[:department_id]
     department_name  = @dept_id 
      @all_doctors = User.all;  #will write my custom query later. 
  end

但在调用此操作时,它会返回错误:

"NetworkError: 404 Not Found  - http://localhost:3000/appointment/getdata?department_id=5"

(在萤火虫中检查)

【问题讨论】:

  • 究竟是什么错误?
  • 嘿,你期待什么样的回应?
  • 发布你的问题的完整细节,否则没有人能够解决它。同样,您会遇到什么类型的错误以及您对 ajax 响应的期望是什么?
  • 错误出现在路由中,在 ajax 请求中您使用的是“appointment/getdata”,但在路由中您已经定义了约会,所以使用
  • 要获取有关您的问题的更多详细信息,请打开 firebug 然后单击错误“?etworkError: 404 Not Found.....”以查看您得到的响应,您会看到很多html + css 在响应顶部但不在乎,向下滚动直到找到错误指示

标签: ruby-on-rails ajax ruby-on-rails-3


【解决方案1】:

错误出现在 ajax url 中,在 ajax 请求中您使用的是“appointment/getdata”,但在路由中您已经定义了约会,

所以用

$("#appointment_department_id").change(function(){ 
//on change of department dropdown.
    $.ajax({
      **url: "/appointments/getdata",**
      type: "GET",
      data: {department_id: $(this).val()},
      success: function(data){
        alert(data);
      }
       error: function(data){
        alert(data);
      }

     });
  });

【讨论】:

【解决方案2】:

您的控制器中的respond_to 在哪里?

如果您要发送 Ajax 请求,则必须像这样定义 respond_to "JS" 或 "JSON":

def getdata
    respond_to do |format|
       format.js 
    end
end

你也可以这样做:

Class Controller 
    respond_to :html,:js, :json

    def getdata
      respond_with(@custom_vars)
    end

end

【讨论】:

  • 非常感谢您提供此信息,我从您的帖子中学到了很多东西!但在我的情况下,我通过在以下代码块之后放置资源 :appointment 部分来修复它。 resources :appointments do collection do get :getdata end end 现在放置,resources:appointments 好像我在默认行之后声明了我的 getdata 然后 ajax 调用正在呈现显示操作。我不知道为什么???但是通过将动作声明的位置放在路线中,它解决了我的问题。
【解决方案3】:

我认为你忘记了 url 中“约会”一词的“s”:“/appointment/getdata”,所以尝试像这样添加“s”:

$.ajax({
  url: "/appointments/getdata",
...
...

【讨论】:

  • @kuldeep 已经指出了,你可以查看下一篇文章。但是在修复这个 URL 并没有解决我的问题。
猜你喜欢
  • 2020-08-13
  • 1970-01-01
  • 1970-01-01
  • 2020-11-12
  • 2014-03-11
  • 2016-05-21
  • 1970-01-01
  • 2011-05-23
  • 1970-01-01
相关资源
最近更新 更多