IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Vyhledávání ze staženého JSON

Aktivity
Avatar
Jan Poláček
Tvůrce
Avatar
Jan Poláček:1.7.2020 10:29

Ahoj, na JS moc nejsem, ale představoval bych si, že mám databázi a přes keyup , když mám již 4 znaky, stáhnu si JSON všech výsledků (jen jednorázově) a poté již vyhledávám jen v tom nataženém JSON, ale samozřejmě je vše asynchronní, aby se nemuselo čekat a tím pádem nevím, jak se staženým JSONem pracovat, protože než se načte, dojede se JS. Čím víc jsem zkoušel, tím víc jsem se do toho zamotal a teď už nevím vůbec nic. Tady přikládám i můj náznak, s čím pracuju

async function nacti_json(hodnota){
        if(isEmpty(promise)){//pokud je prázdná, načti
                let res = await fetch('/url.php?co=144&value='+value);
                return promise = await res.json();
        }
        else{
                //jinak použij, to co máš
        }
}

$(".hledej").keyup(function () {
        var hodnota = $(this).val();
        if(hodnota.length>3){
                nacti_json(hodnota);
                console.log(nacti_json(hodnota));
                //matches = items.filter(s => s.includes(hodnota));
                //console.log(matches);

        }
});

Chci docílit: Snažím se dosáhnout toho, že mám input type text s napojeným datalistem, nejdříve jsem po každém keyupu načítal výsledky přímo přes get, aniž bych s daty pracoval, to funguje, protože se mi prostě do toho listu data nakonec dostanou, ale je tam právě prodleva + větší zátěž serveru (pokud by to dělalo více uživatelů), proto se mi zdá rozumější načíst jednou, klidně větší balík a pak jen prohledávat přímo v JS

Odpovědět
1.7.2020 10:29
Instrukce na adrese 0x77104f29 odkazovala na adresu paměti 0x00000014. S pamětí nelze provést operaci: written.
Avatar
Milan Turyna
Tvůrce
Avatar
Milan Turyna:1.7.2020 21:39

callback

Nahoru Odpovědět
1.7.2020 21:39
Řeš pouze to, co dokážeš ovlivnit.
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:2.7.2020 13:43

Nejdriv musis pochopit, jak to vlastne pracuje.
Mas js kod. Ten bezi radek po radku.
Ale, kdyz tam spustis jiny kod, ktery nastavis asynchronne, tak se spusti neco jako casovac. Js kod pokracuje dal a vedle neho bezi jiny kod. Kdyz chces z toho druheho kodu provest nejakou akci, tak zavolas funkci nebo ten dalsi kod pripises do nej. Ta funkce se oznacuje jako callback.

|
|
+-----|
|      nacitani obrazku/souboru metodou 'asyn'
+----| dalsi kod-----------------------|
|      | callback nebo return          nacitani dalsiho souboru metodou 'asyn'
|                                                     |
nacitani souboru metodou syn (synchronization)
...                                                      | return
|
|

---
        if(isEmpty(promise)){//pokud je prázdná, načti
                let res = await fetch('/url.php?co=144&value='+value);
//                return promise = await res.json();
                promise = await res.json();
                jina_funkce(promise);
// nebo res.json(function(promise) {jina_funkce(promise);});
// nebo res.json(jina_funkce2);
                return true; // nebo nic
        }

function jina_funkce2(promise) {jina_funkce(promise);}

Ale samozrejme netusim, jak se to zapisuje v let js scriptu. To si nejdi googlem. Tohle jsou me tipy. Pri http requestu se tam pise normalne funkce nebo, pri onload.

<img onload="jinafunkce">
<img onload="function(event){jinafunkce();}">
<script id="jsoncode" src="" onload="po_skonceni_nacitani(this.)">

https://stackoverflow.com/…n-script-tag

$body.append(el);
el.onload = function() { //...
el.src = script;
--

https://developer.mozilla.org/…criptElement

function loadError(oError) {
  throw new URIError("The script " + oError.target.src + " didn't load correctly.");
}

function affixScriptToHead(url, onloadFunction) {
  var newScript = document.createElement("script");
  newScript.onerror = loadError;
  if (onloadFunction) { newScript.onload = onloadFunction; }
  document.head.appendChild(newScript);
  newScript.src = url;
}
 
Nahoru Odpovědět
2.7.2020 13:43
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.