Horváth Győző
Egyetemi adjunktus
1117 Budapest, Pázmány Péter sétány 1/c., 2.420-as szoba
Tel: (1) 372-2500/1816
horvath.gyozo@inf.elte.hu
Aszinkron kommunikáció a szerverrel teljes oldalújratöltés nélkül
Kommunikáció a háttérben
Párhuzamosan a betöltött oldallal
$.ajax()
$.get()
$.post()
$.getJSON()
$.getScript()
$elem.load()
load()
A letöltött tartalmat a kiválasztott elembe helyezi.
// Alap használat
$("#hirek").load("hirlista.html");
// Oldaltöredék betöltése
$("#hirek").load("hirlista.html #content");
// Kérés küldése paraméterekkel
$("#hirek").load("hirlista.php", { honnan: 0, mennyit: 10 });
// Callback függvény hívása a kommunikáció végén
$("#hirek3").load("hirlista.php", { honnan: 0, mennyit: 10 }, function() {
alert('Betöltöttem a hírlistát!');
});
get
, post
// GET kérés a szervernek
$.get("hirlista.php", { honnan: 0, mennyit: 10 });
// POST kérés a szervernek
$.post("hirlista.php", { honnan: 0, mennyit: 10 });
// JSON kommuniáció
$.getJSON("hirlista.php", { formatum: 'json' });
// Dinamikus szkriptbetöltés
$.getScript("jquery_ui.js");
$.ajax()
$.ajax({
url: 'hirlista.php',
data: { mettol: 0 },
type: 'POST',
dataType: 'html',
});
jqXHR
objektum metódusai
done()
fail()
always()
$.post("hirlista.php", { honnan: 0, mennyit: 10 })
.done(function (data) {
console.log(data);
})
.fail(function (error) {
console.log(error);
});
serializeArray()
metódus
$('#registration form').submit(function(e) {
// A form elküldésének megakadályozása
e.preventDefault();
var $this = $(this);
$.post('regisztracio.php', $this.serializeArray(), function(data) {
$this.html(data);
});
});
"Hagyományos" HTTP kérés feldolgozása
X-Requested-With: XMLHttpRequest
HTTP fejléc felismerésevar is_ajax_request = req.xhr;
Express-specifikusres.format()
használata (Express)// req.xhr
app.get('/path', function(req, res) {
var is_ajax_request = req.xhr;
// ...
});
// res.format
res.format({
'text/html': function(){
res.send('<p>hey</p>');
},
'application/json': function(){
res.send({ message: 'hey' });
},
});
Tedd lehetővé a felvett hibák törlését AJAX-szal!
A funkció megvalósítása hagyományos módon
/errors/delete/:id
)<a class="btn btn-danger btn-sm" href="/errors/delete/{{id}}" role="button">Törlés</a>
router.get('/delete/:id', function(req, res) {
var id = req.params.id;
req.app.models.error.destroy({id: id})
.then(function (deletedErrors) {
res.redirect('/errors/list');
});
});
Megvalósítás AJAX-szal (list_delete.js
)
Szerveroldal
res.format()
)/ajax/errors/delete/:id
végpont)res.format({
'text/html': function(){
res.redirect('/errors/list');
},
'application/json': function () {
res.json({ success: true });
}
});
Kliensoldal
Az új hiba felvételét oldd meg felugró ablakban. A felugró ablakhoz használd a Bootstrap modal komponensét, a felugró ablak tartalmához pedig a már kész funkció elemeit!
Felugró ablak sablonja (list.hbs
)
<div class="modal fade" id="newErrorModal">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
</div>
<div class="modal-body">
</div>
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
</div><!-- /.modal -->
Gombra kattintva jelenjen meg az ablak
var $modal = $('#newErrorModal').modal({show: false});
// ...
$modal.modal('show');
Az új hiba oldal betöltése a felugró ablak megfelelő részébe
A validációs szabályok működtetése
var $form = $('form[data-toggle=validator]');
$form.validator();
Mégsem gombra kattintva a felugró ablak bezárása
$form.on('reset', function(e) {
$modal.modal('hide');
});
A Mentés gombra kattintva AJAX kérés küldése az űrlap adataival
$.ajax('/errors/new', {
method: 'post',
data: $form.serializeArray(),
dataType: 'json'
})
Szerveroldali logika
{success: true}
)Válasz feldolgozása kliensoldalon
Tedd lehetővé a státuszállítást a következőképpen! Tegyél fel egy gombot, majd arra kattintva egy felugró ablakban legyen egy legördülő mező, amiben a státuszt lehet beállítani, és egy többsoros szöveges beviteli mező az üzenetnek. Mentés után frissüljön a táblázatban a státusz!