2015-07-13 123 views
0

我想用ajax从我的控制器获取信息。Rails ajax不返回json格式

但它没有像我期望的那样返回json。也许我不是路由冲突,但不确定。

我的控制器:

class TicketsController < ApplicationController 
    before_action :authenticate_user! 
    respond_to :js, :json, :html 
    //... 
    def fill_category_select 
    @category_by_system = Category.where(system_id: params[:sent_id]) 
    render json: @category_by_system 
    end 

我的routes.rb:

resources :tickets 

    get 'tickets/fill_category_select/:sent_id', to: 'tickets#fill_category_select' 

我在HAML文件脚本:

:javascript 
     $(document).ready(function(){ 
     $('#ticket_system').change(function(){ 
      $.ajax({ 
        url: "fill_category_select", 
       type: "GET", 
      dataType: "json", 
       data: { sent_id: $('#ticket_system').val() }, 
       async: true, 
       success: function(data, textStatus, xhr) { 
         for(var i in data){ 
          var id = data[i].id; 
          var title = data[i].description; 
          $("#ticket_category").append(new Option(title, id)); 
         } 
         }, 
       error: function(XMLHttpRequest, errorTextStatus, error){ 
         alert("Failed: "+ errorTextStatus+" ;"+error); 
        } 
      }); 
      }); 
     }); 

当我触发事件,并做了要求它是:

REQUEST URL: http://localhost:3000/tickets/fill_category_select?sent_id=44

REQUEST METHOD: GET

STATUS CODE: 200 OK

TYPE: html

和错误恢复和显示的JavaScript警告是:“语法错误:JSON.parse:第1行的JSON数据的第1列意外的字符”

这就像没有hiting我fill_category_select,因为我”我试图提出'错误',它只是显示相同的错误。

有没有人可以给我一个方向?

----------编辑

我发现路线不起作用。

当我添加的资源:门票,除了:[:秀]

请求给我带来了“404错误”,它不是一个单纯的覆盖问题,路由不工作。

我仍然需要发现我做错了什么。任何建议?

+0

如果您将网址与** JSON **到以JSON格式强制它,它会工作吗?例如:** fill_category_select.json **。 –

+0

是的,即使我在请求中放入.json,响应仍然是html。 –

回答

0

我解决它通过添加:

match 'tickets/fill_category_select/:sent_id' => 'tickets#fill_category_select', via: :get 

路线我的方法fill_category_select

0

在您的routes.rb文件中,请用此替换现有的。

get 'tickets/fill_category_select/:sent_id' => 'tickets#fill_category_select', defaults: { format: 'json' } 

这将工作我想

+0

仍然带来Tickets#显示html响应,而不是击中我的方法:[ –

+1

好吧,在脚本中,你已经写了url:“fill_category_select”,把它改成url:“/ tickets/fill_category_select” – Athar

+1

我想以前是将在票务控制器中显示操作。但让我看看我的上述评论是否有意义。 – Athar