【问题标题】:Facing 302 redirect in laravel 5.1在 laravel 5.1 中面临 302 重定向
【发布时间】:2019-05-13 12:16:31
【问题描述】:

我是从 ajax 到控制器/方法的 POST 数据,但是当 ajax 访问该方法时面临 302 重定向,但它仍然显示 302 错误。如果我直接从 url 访问 ajax 方法并返回任何有效但如果我调用 ajax () 函数使用 ajax 它重定向到登录视图。为什么?

控制器

public function ajax(Request $request){ 
return 1;}

路线

Route::group(array('module'=>'Guest','namespace' => 
'App\Modules\Guest\Controllers'), function() {

Route::post('ajax','GuestController@ajax')->name('ajax');
}

脚本:

    $.ajaxSetup({ headers: { 'csrftoken' : '{{ csrf_token() }}' } });
        $(document).ready(function(){

        // Load more data
        $('.load-more').click(function(){
            var row = Number($('#row').val());
            var allcount = Number($('#all').val());
            var rowperpage = 3;
            row = row + rowperpage;

            if(row <= allcount){
                $("#row").val(row);

                $.ajax({
                url: "{{url('GuestController/ajax')}}",
                type: 'post',
                datatype: 'JSON',
                headers: {
                    'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content')
                },
                data: {row:row},
                success: function(data){
                    alert(data);
                }
 });

            }else{

                console.log('if is not working');
            }

        });

        });

它应该命中 ajax() 方法。

【问题讨论】:

  • 在 Postman 中试一试,看看结果如何。
  • @Deckerz 我更新了问题
  • 如果它的重定向意味着你的会话没有通过 ajax 调用工作。也许尝试使用 Laravel 中捆绑的 axios 来进行此调用。这样我们可以查看它是否是 jQuery 特定的问题。

标签: jquery ajax laravel


【解决方案1】:

您在此处设置路由的名称:-&gt;name('ajax');,并且可以通过使用 route() 函数并传递名称来调用该路由。

更改您的 ajax url 以使用路由名称

例如:url: "{{ route('ajax') }}",

还将错误函数添加到您的 ajax 脚本中,例如成功函数:

error: function(XMLHttpRequest, textStatus, errorThrown) { alert('Some Error'); }

您的 ajax 函数应返回 JSON,因此您的函数应如下所示:

public function ajax(Request $request){ return response()->json(1); }

【讨论】:

  • 仍然是同样的错误,但它可以在 post 类型上使用 get 类型,即使不使用任何中间件,它也会将我重定向到登录视图
  • 添加此行后工作&lt;meta name="csrf-token" content="{{ csrf_token() }}"&gt;
  • 因此您的模板没有 csrf-token 字段,因此它被重定向。我希望你现在可以关闭这个话题。
  • 因此您的模板没有 csrf-token 字段,因此它被重定向。我希望你现在可以关闭这个话题。
【解决方案2】:

添加“X-Requested-With”、“XMLHttpRequest”。这尤其是为了安全,因为它可以防止 CSRF 攻击,因为在未经服务器同意的情况下,不能通过 CORS 将此标头添加到 AJAX 跨域请求中。

$.ajax({
 type: "POST",
 beforeSend: function(request) {
  request.setRequestHeader("X-Requested-With", "XMLHttpRequest");
 }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 2015-07-29
    • 2010-11-26
    • 1970-01-01
    • 2016-02-24
    • 2016-09-15
    • 2015-11-14
    相关资源
    最近更新 更多