Provedeme se mi Ajax, změní data, ale nepřekreslí snippet

Tomča
Člen | 9
+
0
-

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
+
+1
-

Ahoj, co dělá ta funkce searchPackage? Jak posíláš AJAXový požadavek?

Tomča
Člen | 9
+
0
-

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
+
+3
-

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.