我正在尝试使用laravel中的ajax提交登录表单,但它似乎是ajax部分无法正常工作。下面是我的login.blade.php
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap-theme.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
</head>
<body>
<div class="secure">Secure Login form</div>
{!! Form::open(array('url'=>'account/login','method'=>'POST', 'id'=>'myform')) !!}
<div class="control-group">
<div class="controls">
{!! Form::text('email','',array('id'=>'','class'=>'form-control span6','placeholder' => 'Email')) !!}
</div>
</div>
<div class="control-group">
<div class="controls">
{!! Form::password('password',array('class'=>'form-control span6', 'placeholder' => 'Please Enter your Password')) !!}
</div>
</div>
{!! Form::button('Login', array('class'=>'send-btn')) !!}
{!! Form::close() !!}
<script type="text/javascript">
$(document).ready(function(){
$('.send-btn').click(function(){
$val=$('input[name=email]').val();
$token=$('input[name=_token]').val();
//alert($val+$token);
$.ajax({
url: '/account/login',
type: "post",
data: {'email':$('input[name=email]').val(), '_token': $('input[name=_token]').val()},
success: function(data){
alert(data);
}
});
});
});
</script>
route.php
Route::get('account/login', function() {
return View::make('login');
});
Route::post('account/login', 'AccountController@login');
控制器中的
public function login() {
if(Request::ajax()) {
$data = Input::all();
print_r($data);
die;
}
}
我试图在成功之前警告ajax部分中的输入值,它会打印输出,但成功提醒不会起作用。
答案 0 :(得分:1)
虽然通过AJAX登录用户是不安全的,但可以做到这一点:
{!! Form::open(array('url'=>'account/login','method'=>'POST', 'id'=>'myform')) !!}
/**
* Your Form
*/
...
{!! Form::submit('Login', array('class'=>'send-btn')) !!}
{!! Form::close() !!}
将自动为您生成CSRF字段。 JavaScript部分:
<script>
(function($) {
$('#myform').submit(function(e) {
$.ajax({
type: 'POST',
url: 'account/login',
data: $('#myform').serialize(),
success: function(data) {
alert(data);
}
});
e.preventDefault();
});
})(window.jQuery);
</script>
这应该是HTML和JavaScript部分的技巧。在Laravel 5.1中,我们可以利用Method Injection来接收输入字段(Request Object),如下所示:
<?php
namespace Blah\Blah;
use Illuminate\Http\Request;
class AccountController
{
...
public function login(Request $request)
{
if ($request->ajax()) {
// Its AJAX!!
return $request->all(); // All the Input fields
}
}
}
请注意我对您的代码所做的更改。请检查此方法是否有效。
干杯!
答案 1 :(得分:0)
试试这个:
code=Sh9QA&token=0982ff3066a3c60dbd3ecf9bcafc801b
答案 2 :(得分:0)
令牌是必需的。尝试添加:
你的ajax请求中的标题:{&#39; X-CSRF-TOKEN&#39;:令牌}
:
$.ajax({
url: route,
headers: {'X-CSRF-TOKEN': token},
type: 'POST',
dataType: 'json',
data: {data : data}
});