2017-10-13 46 views
0

下面的代码在我的分支上工作得很完美(甚至还有一些提交之前)和神秘的我现在得到了js消息:401(未授权)我检查浏览器。Ajax调用不再工作(401未授权)

我有一个自动完成表单,当用户选择一个字段时,它需要发送这个数据,以便通过来自同一个控制器的动作“get_location”进行分析。

home_form.js

$(document).ready(function() { 
    return $("#search_city").on("change", function() { 
    return $.ajax({ 
     url: "home/get_location", 
     type: "GET", 
     dataType: "script", 
     data: { 
     city: $('#search_city').val() 
     } 
    }); 
    }); 

的routes.rb

resources :home, only: [:index] do 
    get 'get_location', on: :collection 
    end 

home_controller.rb

require 'recognize_data' 

class HomeController < ApplicationController 
    layout "home" 
    skip_before_action :authenticate_user!, only: [ :index ] 
    include DataX 

    def index 
    end 

    def get_location 
    # do some stuff here 
    end 

end 

home.html.erb

<!DOCTYPE html> 
<html> 
    <head> 
    <title></title> 
    <%= csrf_meta_tags %> 
    <%= action_cable_meta_tag %> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 
    <%= stylesheet_link_tag 'home/manifest.css', media: 'all' %> 
    <link href='http://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800' rel='stylesheet' type='text/css'> 
    <link href='http://fonts.googleapis.com/css?family=Merriweather:400,300,300italic,400italic,700,700italic,900,900italic' rel='stylesheet' type='text/css'> 
    <script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=AIzaSyB5LELGIW21xr6W1H1NBQNvjqLM3hENa64&libraries=places&language=pt-BR"></script> 
    <%= javascript_include_tag 'home/manifest.js' %> 
    </head> 

<body> 

<%= yield %> 

<%= yield(:form_js) %> 

</body> 
</html> 
+2

听起来像你需要进行身份验证。也许你的认证令牌被缓存了,现在它被清除了。 – zsawaf

+0

您是否使用SPA方法,或者它只是来自平均多页验证的ajax调用?简而言之,您是否使用令牌进行身份验证或使用标准Cookie? – AntonTkachov

+0

@zsawaf我该如何解决它? –

回答

0

我有两个问题,我的代码:

1 - 是的,我忘了把最后});关闭js函数

$(document).ready(function() { 
    return $("#search_city").on("change", function() { 
    return $.ajax({ 
     url: "home/get_location", 
     type: "GET", 
     dataType: "script", 
     data: { 
     city: $('#search_city').val() 
     } 
    }); 
    }); 
}); 

2 - 我在home_controller上使用skip_before_action :authenticate_user!, only: [:index],并导致与get_location动作冲突。所以我从索引中删除了限制,并且只留下了句子:skip_before_action :authenticate_user!以涵盖所有的操作。