【问题标题】:Laravel and AJAX 401 UnauthorisedLaravel 和 AJAX 401 未经授权
【发布时间】:2018-10-23 12:26:16
【问题描述】:

我如何获取我的代码,以便如果我的 AJAX 按钮单击代码出现 401 错误,那么它要么在单击按钮时引发错误消息并显示“您需要登录”,要么将用户重定向到登录?目前它只是在开发控制台中抛出错误,因此用户不知道按钮为什么不起作用。

Ajax js:

$('.visit').on('click', function (event) {
event.preventDefault();
// Make the button a variable here
var buttonToChange = $(this);
$.ajax({
    method: 'POST',
    url: urlVisit,
    data: {
        place_id: $(event.target).data("id"),
        _token: token
    },
    success: function(){
    // Change the button here
        if(buttonToChange.hasClass('btn-visited')){
            buttonToChange.addClass('btn-not-visited');
            buttonToChange.removeClass('btn-visited');
            buttonToChange.html('Not Visited');
        //Count will go down
        }
        else{
            // Do the opposite
            buttonToChange.addClass('btn-visited');
            buttonToChange.removeClass('btn-not-visited');
            buttonToChange.html('Visited');
//count will go up
        }
    },
});

【问题讨论】:

    标签: ajax laravel laravel-5


    【解决方案1】:

    你可以试试 jQuery AJAX 的 statusCode 部分。

    $('.visit').on('click', function (event) {
    event.preventDefault();
    // Make the button a variable here
    var buttonToChange = $(this);
    $.ajax({
        method: 'POST',
        url: urlVisit,
        data: {
            place_id: $(event.target).data("id"),
            _token: token
        },
        statusCode: {
            401: function() {
                alert( "Not authenticated" );
            }
        }
    success: function(){
    // Change the button here
        if(buttonToChange.hasClass('btn-visited')){
            buttonToChange.addClass('btn-not-visited');
            buttonToChange.removeClass('btn-visited');
            buttonToChange.html('Not Visited');
        //Count will go down
        }
        else{
            // Do the opposite
            buttonToChange.addClass('btn-visited');
            buttonToChange.removeClass('btn-not-visited');
            buttonToChange.html('Visited');
    //count will go up
        }
    },
    }); 
    

    【讨论】:

      【解决方案2】:

      简单示例

      您可以在浏览器中通过inspect 测试此代码:

      welcome.blade.php

          <script>
              var urlVisit="{{route('route_test')}}"
              var token = "{{csrf_token()}}"
              $.ajax({
                  method: 'POST',
                  url: urlVisit,
                  data: {
                      place_id: 1,
                      _token: token
                  },
                  success: function (response) {
                      alert('ok')
      
                  },
                  error: function (xhr, ajaxOptions, thrownError) {
                      if (xhr.status == 419)
                      {
                          alert(xhr.responseText) // text of error
      
                          // do something
                      }
                      else if(xhr.status == 401)
                      {
                          // do something
                      }
      
                  }
      
              });
          </script>
      

      web.php(路线):

      use Illuminate\Http\Request;
      Route::get('/', function () {
          return view('welcome');
      });
      
      Route::post('test', function (Request $request) {
          $place_id= $request->get('place_id');
          return ('yes');
      })->name('route_test');
      

      【讨论】:

      • 如何处理未经授权的 401 消息。我知道消息是什么,我只想显示错误消息或重定向,而不是在我收到此错误时出现任何内容。
      • 前端处理?
      • 是的,我想通过显示提示用户登录的错误消息或实际将用户重定向到登录页面来处理前端的 401
      • 我朋友的代码不走运,错误仍然显示,我在 if else 中放置了任何更改
      猜你喜欢
      • 2018-10-08
      • 2020-11-15
      • 1970-01-01
      • 2012-08-17
      • 1970-01-01
      • 2019-02-01
      • 2022-11-26
      • 1970-01-01
      • 2011-12-12
      相关资源
      最近更新 更多