Php 在Laravel5.5中,一个AJAX post请求在没有请求时重定向

Php 在Laravel5.5中,一个AJAX post请求在没有请求时重定向,php,jquery,ajax,laravel,Php,Jquery,Ajax,Laravel,我正在做基本的订阅表单,尝试使用Ajax post请求。 因为我是Ajax新手,所以我在谷歌上搜索了一些关于这个问题的信息,但没有成功,尽管这可能是一个简单的解决方案 问题是,当我提交表单时,它会给我带来错误: MethodNotAllowedHttpException无消息 查看。刀片: //Ajax <script> $.ajaxSetup({ headers: { 'X-CSRF-TOKEN': $('meta[name="cs

我正在做基本的订阅表单,尝试使用Ajax post请求。 因为我是Ajax新手,所以我在谷歌上搜索了一些关于这个问题的信息,但没有成功,尽管这可能是一个简单的解决方案

问题是,当我提交表单时,它会给我带来错误:

MethodNotAllowedHttpException无消息

查看。刀片:

//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>
控制器

class SubsController extends Controller
{

    public function store(Request $request)
    {
        $newsubscriber = new Subscriber;
        $newsubscriber->email = $request->input('email');
        $newsubscriber->save();
    }

}
我确信名称空间很好,那么真正的问题是什么呢?

根据,ajax设置中请求方法的键是“method”,而不是“type”,这意味着您的请求是默认获取的。因此,不允许使用异常中所述的方法。

将“类型”更改为“方法”

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

_token : {{ csrf_token() }}

Blade会将其插入您的js。

根据上述答案,我认为这是因为
csrf\u 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() }}" />


有关更多详细信息,请阅读。

subcontroller.php中使用

use App\Subscriber;
阿贾克斯

$.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() }}">


谢谢。不管怎样,我把它改成了method,还是一样,有什么想法吗?:[嗯,我会确保POST请求确实发送到了正确的路由。请在DevTools网络选项卡中检查特定请求,也许您会注意到其中的一些内容?作为旁注,我不会查找与crsf令牌相关的内容(如其他人所建议的),因为它会抛出TokenMismatchException,not MethodNotAllowed。@StevenmcKevin情况并非如此,您可以使用
type
来设置请求类型,它作为
method
设置的别名记录在文档页面上。我完全按照这里所说的做了,仍然没有做任何事情。无论如何,谢谢您。请尝试替换
url:'/subscribbing'
url:'{{action('SubsController@store") }}“
MethodnotAllowedExpection在您尝试请求路由中定义的不同类型的路由时被抛出。因此,我猜测ajax可能是通过get方法请求的。您能分享google chrome开发人员请求的网络详细信息吗panel@OndOne,是否尝试将此参数添加到发送的数据中?
type
method
在jquery ajax中是相同的,
type
method
的别名版本。
<meta name="csrf-token" content="{{ csrf_token() }}">