在Laravel 5.5中,AJAX帖子请求在没有重定向时重定向

时间:2018-01-01 23:28:53

标签: php jquery ajax laravel

我正在做基本的订阅表单,尝试使用Ajax发布请求。 由于我是Ajax的新手,因此我搜索了一些有关此问题的内容,但没有成功,即使这可能是一个简单的修复。

问题是,当我提交表单时,它会引发错误:

  

MethodNotAllowedHttpException没有消息

View.blade:

1a

路线

//Ajax

<script>
    $.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        }
    });

    $("#subscribeform").submit(function (e) {
        e.preventDefault();
        var emailval = $('#subscriber').val();
        console.log(emailval);
        if(emailval !== "") {
            $.ajax({
                cache: false,
                url: '/subscribing',
                type: 'POST',
                dataType: 'json',
                data: {
                    email:emailval
                },
                success: function (data) {
                    console.log(data);
                }
            });
        }
    });

</script>

//Form
<form id="subscribeform" method="post">
    <input type="text" name="subscriber" id="subscriber" placeholder=" email@example.com">
    <input type="submit" value="Submit">
</form>

控制器

Route::post('/subscribing', 'SubsController@store');

命名空间很好,我确定,那真的可能是一个什么问题?

4 个答案:

答案 0 :(得分:0)

将“type”更改为“method”。

您也忘记了AJAX调用中的CSRF令牌。将其添加为参数:

formdata={'numeroOriginario': '1234'}, 

刀片会将其插入您的js。

答案 1 :(得分:0)

根据以上答案,我认为是因为csrf_token,解决你的问题试试这样,

您需要按照以下文档中的建议使用ajaxSetup

$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});

并在模板上添加此内容,

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

或者只是将其添加到表单中,

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

有关详细信息,请参阅doc

答案 2 :(得分:0)

SubsController.php

中使用
use App\Subscriber;

Ajax

$.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        }
    });

$("#subscribeform").submit(function (e) {
        e.preventDefault();
        var emailval = $('#subscriber').val();
        console.log(emailval);
        if(emailval !== "") {
            $.ajax({
                cache: false,
                url: '/subscribing',
                type: 'POST',
                dataType: 'json',
                data: {
                     _token: '{!! csrf_token() !!}',
                    email:emailval
                },
                success: function (data) {
                    console.log(data);
                }
            });
        }
    });

模型`Subscriber.php'

  class Subscriber extends Model
{
     protected $fillable = ['email'];
     protected $table = 'subscriber';

}

并在标题中添加以下代码:

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

答案 3 :(得分:-1)

根据Jquery docs,ajax设置中请求方法的关键是“方法”,而不是“类型”,这意味着您的请求默认为GET。因此,不允许使用Method,如异常中所述。