Я пытаюсь добавить функцию ajax к подобной кнопке.Переадресация формы на маршрут по запросу ajax в Laravel 5
Все работает, за исключением того, что я переадресовываюсь на страницу с данными json после того, как я нажимаю кнопку типа.
Я использую e.preventDefault()
, и он все еще перенаправляет меня.
Если я использую on('click')
, я получаю ошибку в журнале консоли, хотя я включил скрытый ввод с токеном.
jquery.min.js: 4 POST http://localhost/socialnet/public/likeStatus 500 (Internal Server Error)
Если я использую on('submit')
данные проходит через, но я получаю перенаправлены на страницу с ответом JSON.
Это в мой контроллер [email protected]()
public function likeStatus() {
if (Input::has('like_status')) {
$status = Input::get('like_status');
$selectedStatus = Status::find($status);
$selectedStatus->likes()->create([
'user_id' => Auth::user()->id,
'status_id' => $status
]);
$response = array(
'status' => 'success',
'msg' => 'You have liked this status',
);
return Response::json($response);
}
}
Вид
{!! Form::open(['action' => '[email protected]', 'id' => 'like_form']) !!}
{!! Form::hidden('like_status', $status->id) !!}
{!! Form::hidden('user_id', Auth::user()->id) !!}
<button type="submit" name="likeStatus" class="btn btn-info btn-xs" id="like-status">
<i class="fa fa-thumbs-up"></i> Like ({{ $likes_count }})
</button>
{!! Form::close() !!}
Javascript
$('#like-status').on('click', function(e){
e.preventDefault();
var status_id = $('input[name=like_status]').val();
var user_id = $('input[name=user_id]').val();
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').val()
}
});
$.ajax({
url: 'http://localhost/socialnet/public/likeStatus',
method: 'post',
data: {status_id: status_id, user_id: user_id},
success: function(data) {
console.log(data.msg);
}
});
});
EDIT: Я просто добавил CSRF токен в переменную и добавил до data
var status_id = $('input[name=like_status]').val();
var user_id = $('input[name=user_id]').val();
var CSRF_TOKEN = $('meta[name="csrf-token"]').attr('content');
$.ajax({
url: 'http://localhost/socialnet/public/likeStatus',
method: 'post',
data: {status_id: status_id, user_id: user_id, _token: CSRF_TOKEN},
success: function(data) {
console.log(data.msg);
}
});
Это дает Status Code: 200
на вкладке Сети, но дает undefined
в консоли и никаких данных не проходят.
EDIT 2: Что-то очень странное происходит. Я получаю undefined
в консоли, когда я стараюсь, как новый статус, и ничего не происходит. Но он работает, когда мне нравится предыдущий (старый) статус, однако, когда я нажимаю подобную кнопку, я перенаправляюсь на страницу данных json, и данные проходят.
Что я делаю неправильно?
Вы пробовали var_dump в PHP? Вы получили что-нибудь? – Yanaro