>我有一个问题。我的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 请求。