Laravel,$.ajax POST做一个GET请求


Laravel, $.ajax POST does a GET request

>我有一个问题。我的jquery提交函数尝试执行GET请求,而我将其设置为POST请求。

我的提交功能

function authenticate() {
var form = $('#form-login');
form.submit(function(evt) {
    evt.preventDefault();
    console.log('submitting!');
    console.log(form.serialize());
    $.ajax({
        type: 'POST',
        url: 'http://website.dev/loginz',
        data: form.serialize(),
        dataType: 'json',
        success: function(data) { log_error(data.error); }
    });
});
}

路线.php

Route::post('loginz', 'User'LoginController@authenticate');

我的浏览器怎么说

GET http://website.dev/loginz/ 405 (Method Not Allowed)

/登录

/* POST */
function authenticate(Request $request) {
    $username = $request->input('username');
    $password = $request->input('password');
    if(Auth::attempt(['username' => $username, 'password' => $password])) {
        redirect()->route('home'); /* should redirect to player */
    }
    return response()->json(['error' => trans('errors.user_password_combination').' => '.$username.' & '.$password]);
}

也许我只是愚蠢地撞墙,我把自己盯死了,我只是看不到错误:P

你用的是哪个版本的拉拉维尔?

必须为发布请求提供提醒 csrf 令牌。

您也可以在'App'Http'Middleware'VerifyCsrfToken::class,中禁用CSRF验证

但是,如果您在客户端设置会更好。意思是,您应该在刀片模板中添加以下内容:

$( document ).ready(function() {
    $.ajaxSetup({ headers: { 'X-CSRF-TOKEN': '{{ csrf_token() }}' } });
});

但首先,在Chrome(示例)检查器->网络->标头中:请求方法是什么?

错误是 301 重定向。问题是我自己造成的。我添加了从非斜杠到斜杠的重定向(例如/page 到/page/),因此 POST 被重定向到 GET 请求。