Provedeme se mi Ajax, změní data, ale nepřekreslí snippet
- Tomča
- Člen | 9
Zdravím, potřeboval bych poradit. Mám udělané vyhledávání v tabulce
pomocí ajaxu. Ajax se spustí po kliknutí na tlačítko vyhledat, vpravo dole
v Tracy se mi zobrazí lišta Ajax(proměnné jsou pozměněné, díval jsem
se), ale vůbec se změna dat neprojeví na snippetu.
Respektive se nepřekreslí.
public function rendertable(): void
{
if (!isset($this->template->packages)) {
$this->template->packages = $this->packageManager->GetPackages();
}
}
public function handlesearch($search_input){
$this->template->packages = array($this->packageManager->GetPackageById(2));
$this->redrawControl();
}
{block content}
<div class="responsive-table text-center position-relative">
<div class="d-flex justify-content-end">
<a n:href="Packages:new"><button class="btn btn-success mt-3">Vytvořit balíček</button></a>
</div>
<p class="display-4 mt-2 mb-2">Balíčky</p>
<div class="mb-3">
<input type="text" id="search_input" class="form-control d-inline-block col-md-11" placeholder="vyhledat podle id nebo názvzu..."/>
<button name="searchbtn" id="searchbtn" class="d-inline-block btn btn-primary searchbtn" onclick="searchPackage(document.getElementById('search_input').value)">vyhledat</button>
</div>
<table class="table">
<thead>
<tr>
<th scope="col">id</th>
<th scope="col">Jméno</th>
<th scope="col"></th>
<th scope="col"></th>
</tr>
</thead>
<tbody >
{snippet table}
{foreach $packages as $package}
<tr>
<th scope="row">{$package->id}</th>
<td>{$package->name}</td>
<td><a n:href="Packages:update id=>$package->id"><button class="btn btn-primary">Upravit</button></a></td>
<td><a n:href="delete! id=>$package->id"><button class="btn btn-danger">Odstranit</button></a></td>
</tr>
{/foreach}
{/snippet}
</tbody>
</table>
</div>
- jiri.pudil
- Nette Blogger | 1032
Ahoj, co dělá ta funkce searchPackage
? Jak posíláš AJAXový
požadavek?
- Tomča
- Člen | 9
jiri.pudil napsal(a):
Ahoj, co dělá ta funkce
searchPackage
? Jak posíláš AJAXový požadavek?
function searchPackage(search_value) {
var xhttp = new XMLHttpRequest();
xhttp.open("GET", "?search_input="+search_value+"&do=search", true);
xhttp.send();
}
Editoval Tomča (7. 7. 2021 9:22)
- jiri.pudil
- Nette Blogger | 1032
Ach tak. No, ty snippety se samy nepřekreslí :) v dokumentaci k AJAXu je takový žlutý varovný boxík, který říká:
Nette neobsahuje implementaci AJAX požadavků na straně klienta. Doporučujeme knihovnu Naja nebo Nittro framework.
(Pro úplnost: nedávno přibylo do výběru ještě velmi jednoduché Axette.)
Tu klientskou implementaci potřebuješ například právě k překreslení snippetů a vůbec zpracování odpovědi ze serveru, které by sis jinak musel napsat sám.
Mimochodem pokud takhle lepíš parametry v URL, měl bys je zakódovat pro použití v URL.