Reload stránky na základě změny na serveru pomocí setTimeout
- admin@easyweb4u.cz
- Backer | 143
Zdar vespolek. Potřebuju zjišťovat, zda je na serveru nová objednávka a poté reloadovat stránku. Zkusil jsem to dost neobratně, v šabloně jsem použil setTimeout() a přes nette.ajax spustil signál, který mi přes snippet vracel kýžený aktuální počet objednávek. Ten jsem chtěl porovnat s cookie s původním počtem v šabloně a v případě, že nový počet je větší, udělat reload. Bordel mi v tom ale dělal ten snippet.
<script>
setTimeout(function(){
$.nette.ajax({
url: {$control->link("ordernum!")},
error: function () {
alert("theres an error with AJAX");
}
});
},5000);
</script>
Já bych vlastně potřeboval, aby mi ten signál poslal tu hodnotu zpátky do JS jinak než přes snippet. Snad by to mohlo jít přes JSON – v presenteru $this->sendJson($data), to ale nevím, zda JSON takto odejde do šablony a jak ho v šabloně (v JS scriptu) přečíst. Možná spustit signál a pak přečíst v šabloně výsledek nějak umí nette.ajax přímo v té funkci výše, nevím…
Předem dík za radu
Poradí někdo jak na to?
- dakur
- Člen | 493
Můžeš buďto poslat request bez nette.ajax, zpět na klienta přijde
číslo, tam ho porovnáš a pak zavoláš
window.location.reload()
. Anebo pošleš request přes nette.ajax,
porovnáš v presenteru a když true, zavoláš
$this->redirect('this')
. V response pak přijde něco jako
{redirect: "url adresa"}
a nette.ajax už provede redirect (tj.
reload) samo.
Klasicky pres $.ajax, neni potreba volat $.nette.ajax.
Rozdíl jsem teď zrovna vysvětloval tady. Zkráceně nette.ajax využiješ tehdy, když potřebuješ framework-specific věci. Na prostý request stačí $.ajax nebo fetch.
Editoval dakur (5. 5. 2021 9:39)
- admin@easyweb4u.cz
- Backer | 143
Ono mi to funguje následovně:
<script>
setTimeout(function(){
var olast;
olast = $.cookie("orderlast");
$.nette.ajax({
url: {$control->link("ordernum!")},
data: {'orderlast': olast},
error: function () {
alert("theres an error with AJAX");
}
});
},5000);
</script>
spustí se handler
<?php
public function handleOrdernum($orderlast) {
if ($this->isAjax()) {
$row = $this->database->table('inforest')->where('userid = ?', $this->userid)->fetch();
if ($row) {
$this->ordernum = count($this->order->showOrdersRest($row->id, 1)); // dnes
if ($orderlast) {
if ('(' . $this->ordernum . ')' > $orderlast) {
$this->orders = $this->order->showOrdersRest($row->id, 1); // dnes
$this->orderlast = $orderlast;
$this->redirect('Orders:default');
}
}
}
} else {
$this->flashMessage('Chyba přenosu dat!');
}
}
?>
Kontrola se provede, ALE TEN SETTIMEOUT SE UŽ DÁLE NEVYKONÁVÁ. Zkouším to všelijak zapouzdřit do snippetu a provést redrawControl, což mi ve většině případů funkuje, ale tady ne.