【问题标题】:Ajax call with Laravel 5 returns Error 500 (Internal Server Error), even when csrf token is passed使用 Laravel 5 的 Ajax 调用返回错误 500(内部服务器错误),即使传递了 csrf 令牌
【发布时间】:2017-04-10 08:06:56
【问题描述】:

标题说明了一切。

.blade.php 文件:

@foreach($posts as $post)

            <article class="post" data-postid=" {{ $post->id }} ">
                <p>{{ $post->body }}</p>
                <div class="info"> 
                    Posted by {{$post->user->first_name}}  on {{ $post->created_at }}
                </div>
                <div class="interaction">
                    <a href="#" class="like">Like</a> |
                    <a href="#" class="like">Dislike</a>
                    @if(Auth::user() == $post->user) 
                        |
                        <a href="#" class="edit">Edit</a> |
                        <a href="{{ route('post.delete', ['post_id' => $post->id]) }}">Delete</a> 
                    @endif
                </div>
            </article>

        @endforeach

.blade.php 文件中的 JS:

<script>
        var token = '{{ csrf_token() }}';
        var urlEdit = '{{ route('edit') }}';
        var urlLike = '{{ route('like') }}';
    </script>

.js 文件:

 $('.like').on('click', function(event){
    event.preventDefault();
    postId = event.target.parentNode.parentNode.dataset['postid'];
    var isLike = event.target.previousElementSibling == null; //Checks if it's a like or dislike.

    $.ajax({
        method: 'POST',
        url: urlLike,
        data: {isLike: isLike, postId: postId, _token: token}
    })
    .done(function(){

    });
});
  • 我已尝试检查路线是否有问题。
  • 我尝试在元标记内传递令牌,而不是将其定义为 javascript 变量
  • 我尝试使用双手镯“而不是单手镯”。

似乎没有任何效果,这是怎么回事?

【问题讨论】:

  • 你有 PHP 错误报告吗?如果没有,请添加它并查看返回的错误,它会告诉您比我们想象的更多的信息。让我们知道那是什么意思,我们可以提供更多帮助
  • 嗯,据我所知,我有错误报告,所以它不应该与 PHP 有任何关系。无论如何,我通过在“App\Http\Middleware\VerifyCsrfToken”中排除csrf-verification来“解决”它,只需在protected $except = [ '/path' ];中添加路径
  • Error 500 (Internal Server Error) 非常明确地表示服务器上存在错误,并且几乎可以肯定会在 php.ini 中抛出该错误。无论如何,很高兴你解决了:)

标签: javascript php jquery ajax laravel-5


【解决方案1】:

首先你必须像这样添加带有 csrf 的元数据。

<head>
   <meta name="csrf-token" content="{{ csrf_token() }}">
</head>

<script>
  $('.like').bind('click', function(event) {
  event.preventDefault();
  postId = event.target.parentNode.parentNode.dataset['postid'];
  var isLike = event.target.previousElementSibling == null; 
  $.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
      }
  });

  $.ajax({
    url: url,
    type: "POST",
    data: {isLike: isLike, postId: postId, _token: token},
    dataType: "json",
    beforeSend: function(){
          $('#loading').show();
        },          
       success: function(resp) {
        console.log(resp);
      }
    });
  });

</script>

【讨论】:

  • 请检查并告诉我
猜你喜欢
  • 2016-10-13
  • 1970-01-01
  • 2018-06-19
  • 2018-07-21
  • 2016-09-16
  • 1970-01-01
  • 2019-11-12
  • 2016-06-11
  • 2015-09-20
相关资源
最近更新 更多