Формы и кнопки на сайтах отправляют данные без полной перезагрузки страницы благодаря XMLHttpRequest. Покажем, как делать AJAX-запросы без jQuery, используя стандартный JavaScript.
Базовый пример AJAX
Запрос отправляется при загрузке страницы:
window.onload = function () {
sendRequest();
}
function sendRequest(){
var request = new XMLHttpRequest();
request.open('GET', '/request');
request.send();
request.onreadystatechange = function () {
if (request.readyState == 4 && request.status == 200){
var response = request.responseText;
console.log(response);
}
}
}
XMLHttpRequest — это класс для асинхронных браузерных запросов. Проверка readyState == 4 подтверждает получение ответа, status == 200 — его корректность.
Зависимый выпадающий список
Практический пример — динамическая загрузка категорий при смене типа:
{{ Form::select('type', ['places' => 'Места', 'events' => 'События'],
$node->type, ['onchange' => 'getCategory(this)']) }}
{{ Form::select('category', [...], $node->category, ['id' => 'categories']) }}
function getCategory(type){
var request = new XMLHttpRequest();
var params = "type="+type.value;
request.onreadystatechange = function () {
if (request.readyState == 4 && request.status == 200){
document.getElementById("categories").innerHTML =
request.responseText;
}
}
request.open('GET', '/get-category?'+params, true);
request.send();
}
PHP контроллер
public function getCategory(Request $request){
if ($request->type == 'places'){
$cat = new \App\Category;
$terms = $cat->placeCategory();
foreach ($terms as $key => $item) {
echo "";
}
}
}
Laravel автоматически преобразует массивы в JSON при возврате. Коды ответа: 200 — успех, 404 — не найдено, 500 — ошибка сервера.