我有类似的问题 one .
我正在尝试使用 Laravel 5.3 Auth 进行 AJAX 登录。
这是我到目前为止得到的:
var login = function()
{
var data = {};
data["email"] = $('#email').val();
data["password"] = $('#password').val();
if($('#remember').is(':checked'))
data["remember"] = "on";
$.ajax({
type: "POST",
url: '/login',
data: JSON.stringify(data),
// data: data,
headers : { 'Content-Type': 'application/json' },
success: function(data) {
console.log(data);
// window.location.href = "/dashboard";
}
});
};
我将 CRSF token 发送为 X-CSRF-TOKEN
header 。
问题是,当我成功登录时,我在同一页面上说,
但在“网络”选项卡中我可以看到 /dashboard
页面已加载,但我不是
重定向。
以同样的方式,当我传递错误的凭据时,我会停留在同一页面上,
但我可以看到/login
页面在单独的调用中加载,并带有实际显示的错误消息。
此外,我也尝试过不使用 headers : { 'Content-Type': 'application/json' },
并将数据发送为:data = data,
但我也得到同样的结果。
为什么浏览器不会重定向到该页面,因为它正在“后台”加载该页面?
编辑:我也得到了正确的页面作为请求响应,我可以看到它
在控制台中(console.log(data)
;)。
最佳答案
//Login FORM
$(document).on('submit', 'form#FormID', function(e) {
e.preventDefault();
var forms = document.querySelector('form#FormID');
var request = new XMLHttpRequest();
var formDatas = new FormData(forms);
request.open('post','/login');
request.send(formDatas);
request.onreadystatechange = function() {
if (request.readyState === 4) {
if (request.status === 200) {
if (request.responseText == 'success') {
setTimeout(function() {
window.location.href = "/dashboard";
}, 5000);
}else{
};
}
}
}
});
//Controller
public function authUser(Request $request){
$data = $request->except('_token');
$validate = \Validator::make($data, [
'email' => 'email'
]);
if ($validate->fails())
return 'Invalid email format for username.';
if (\Auth::attempt($data)) {
return 'success';
}else{
return 'Invalid username or password';
}
}
//Route
Route::post('/login', 'YourController@authUser');
问题可能出在重定向之前预期 AJAX 请求的响应。 尝试上面的代码。
关于javascript - Laravel 5.3 AJAX 登录不重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40631575/