Hal*_*nex 6 php ajax jquery laravel laravel-5
我正在尝试通过ajax将数据提交到数据库.提交文章页面没有ajax工作正常.我已添加,console.log()只是为了看看是否有任何事情,但我得到这个错误:
POST http:// localhost/laravel-5/public/articles/create 500(内部服务器错误)
我的代码出了什么问题?是javascript还是控制器?
编辑:我得到了这个 laravel.log
C:\ xampp\htdocs\laravel-5\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\VerifyCsrfToken.php中的异常'Illuminate\Session\TokenMismatchException':53
路线
Route::resource('articles', 'ArticlesController');
Run Code Online (Sandbox Code Playgroud)
调节器
public function store(Requests\ArticleRequest $request)
{
$article = new Article($request->all());
Auth::user()->articles()->save($article);
$response = array(
'status' => 'success',
'msg' => 'Article has been posted.',
);
return \Response::json($response);
}
Run Code Online (Sandbox Code Playgroud)
jQuery的
$(document).ready(function() {
$('#frm').on('submit', function (e) {
e.preventDefault();
var title = $('#title').val();
var body = $('#body').val();
var published_at = $('#published_at').val();
$.ajax({
type: "POST",
url: 'http://localhost/laravel-5/public/articles/create',
dataType: 'JSON',
data: {title: title, body: body, published_at: published_at},
success: function( data ) {
$("#ajaxResponse").append(data.msg);
console.log(data);
}
});
});
Run Code Online (Sandbox Code Playgroud)
视图
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
<h1>Write a New Article</h1>
<hr>
{!! Form::open(['url' => 'articles', 'id' => 'frm']) !!}
<p>
{!! Form::label('title', 'Title:') !!}
{!! Form::text('title') !!}
</p>
<p>
{!! Form::label('body', 'Body:') !!}
{!! Form::textarea('body') !!}
</p>
<p>
{!! Form::label('published_at', 'Date:') !!}
{!! Form::input('date', 'published_at', date('Y-m-d'), ['class' => 'form-control']) !!}
</p>
<p>
{!! Form::submit('Submit Article', ['id' => 'submit']) !!}
</p>
{!! Form::close() !!}
<h3 id="ajaxResponse"></h3>
@if($errors->any())
<ul>
@foreach($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
@endif
<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
<script src="{{ URL::asset('assets/js/ArticleCreate.js') }}"></script>
Run Code Online (Sandbox Code Playgroud)
});
man*_*nix 13
当您通过POST向资源控制器发出请求时,它会自动调用store方法:
Verb Path Action Route Name
----------------------------------
POST /articles store articles.store
Run Code Online (Sandbox Code Playgroud)
所以,你只需要将ajax url更改为:
$.ajax({
type: "POST",
url: 'http://localhost/laravel-5/public/articles',
Run Code Online (Sandbox Code Playgroud)
当您需要发送会话令牌时,您可以添加一个全局元标记,例如这是您的网站:
<meta name="csrf-token" content="{{ csrf_token() }}">
Run Code Online (Sandbox Code Playgroud)
然后,只需通过ajax的标头添加令牌:
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
Run Code Online (Sandbox Code Playgroud)
如果您正在使用Form::open()函数(LaravelCollective),它会添加一个隐藏的输入,并将令牌作为名称的值_token.因此,您可以删除元标记并编辑您的ajax标题,如下所示:
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('[name="_token"]').val()
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
27697 次 |
| 最近记录: |