【发布时间】:2016-11-23 08:19:16
【问题描述】:
我正在制作功能,如果使用 ajax 发送编辑表单,则验证并将响应发送到视图。但是,页面加载到新的 URL 上,例如 localhost:8000/comment/id。该页面显示我想要的消息。在视图未重新加载的情况下如何获得该响应?
HTML
<form class="modify-form" method="post" action="{{ route('comment.update', $mypage->id) }}">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<input type="hidden" name="_method" value="put">
<p class="comment-message">{{ $mypage->message }}</p>
</form>
路线
Route::match(['put', 'patch'], 'comment/{id}', ['as'=>'comment.update', 'uses'=>'MyPageController@update']);
jQuery
var $writeForm = $('form.visitor');
$writeForm.find('.write').click(function(e){
var url = $writeForm.attr('action');
e.preventDefault();
$.ajax({
url: url,
type: 'POST',
data: $writeForm.serialize(),
success: function(res){
if (res.status) {
location.reload();
}
},
error: function(res){
$writeForm.after('<div class="alert alert-danger" role="alert">'+res.responseJSON.errors+'</div>')
//console.log(res.responseJSON.errors);
}
});
});
控制器
public function update($id) {
$validator = validator::make($data = Input::all(), mypage::$edit);
if($validator->passes()) {
$mypage = mypage::findOrFail($id);
$message = Request::input('message');
$mypage->update(['message' => $message]);
$mypage->save();
$response = array();
$response['status'] = true;
return response()->json($response);
}
if ($validator->fails()) {
$response = array();
$response['status'] = false;
$response['errors'] = $validator->errors()->all();
return response()->json($response, 400);
}
}
【问题讨论】:
-
我会推荐使用 Vue.js,我知道这可能不是你想要的答案,但这是一个很好的建议,因为 vue.js 轻量级易于使用并且与 Laravel 具有很好的兼容性。它允许您轻松地从后端提取和发布数据,并且与普通的 Ajax 方法相比,它有很多方法可供您使用。
标签: javascript php jquery ajax laravel