У меня есть следующий код larvel, который использует запросы get и post, который работает. Я пытаюсь добавить ajax к этому, но я боюсь. Как мне добавить ajax?
Вот код в представлении.
<form action="goal" method="post">
<input name="usersID" type="form"> usersID </input> <br>
<input name="goalValue" type="form"> goal </input> <br>
<input name="goalpoints" type="form"> goalpoints </input> <br>
<input name="points" type="form"> points </input> <br>
<input name="activitiesID" type="form"> activitiesID </input> <br>
<button type="submit"> Submit </button>
</form>
Вот код на маршруте
Route::get("goal", "PagesController@getGoal");
Route:: post("goal",
["as" => "goal",
"uses" => "tableController@getGoal"]);
Вот код в контроллерах
// контроллер 1
public function getGoal()
{
return view("pages.goal");
}
//контроллер 2
public function getGoal()
{
$usersID = $_POST["usersID"];
$goal = $_POST["goalValue"];
$goalpoints = $_POST["goalpoints"];
$points = $_POST["points"];
$activitiesID = $_POST["activitiesID"];
DB :: table("goals") -> insert
(
array("usersID" => $usersID, "goal" => $goal, "goalpoints" => $goalpoints, "points" => $points,
"activitiesID" => $activitiesID)
);
return view("pages.goal");
}
Предполагая, что ваши знания JQuery/Javascript ограничены (простите меня, если нет), я расскажу немного подробнее, чем существующий ответ.
Я бы начал с добавления ID
к вашей форме.
<form action="goal" method="post" id="goalForm">
Затем я рассмотрю документацию CSRF на Laravel, иначе вы можете получить ошибки, связанные с "несоответствием токена". Короче, вам нужно сделать одну из двух вещей:
Добавить <input type="hidden" name="_token" value="<?php echo csrf_token();?>">
все ваши формы.
Добавьте <meta name="csrf-token" content="<?= csrf_token()?>">
В разделе <head>
.
Если вариант 2 вам также нужно будет добавить этот javascript к нижней части шаблона:
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
Это добавит ваш токен ко всем вашим запросам AJAX.
Затем используйте JQuery для обработки отправки формы.
$('#goalForm').submit(function(e){
// I have passed in the event 'e' and preventing default browser functionality.
e.preventDefault();
var formData = $(this).serialize(); //Get the form data and put in a structure i can send
$.post('goal', formData).done(function(response){
// after the ajax is done, do something with the response
alert(response);
});
});
Ваш метод контроллера должен будет что-то вернуть (при условии, что контроллер 2):
public function getGoal()
{
$usersID = $_POST["usersID"];
$goal = $_POST["goalValue"];
$goalpoints = $_POST["goalpoints"];
$points = $_POST["points"];
$activitiesID = $_POST["activitiesID"];
try{
DB::table("goals")->insert(
array("usersID" => $usersID, "goal" => $goal, "goalpoints" => $goalpoints, "points" => $points, "activitiesID" => $activitiesID)
);
} catch (\Exception $e) {
echo "something went wrong";
}
echo "Awesome it worked";
}
Я добавил попытку/уловку, если ваша вставка БД не удалась. Также просто эхом в целях тестирования, вы можете обновить это позже.
Следуя из моего комментария, вы можете использовать jQuery для этого (есть другие опции, которые не требуют загрузки jQuery) с помощью методов jQuery $.get и $.post.
Вот пример того, как вы будете использовать jQuery:
$.get( "goal", function( data ) {
//this is called when a successful get request is made. The server response is in the data object
});