Autor | Zpráva | ||
---|---|---|---|
stepanka Profil * |
#1 · Zasláno: 8. 9. 2011, 14:41:20
Ahoj,
měla bych takový dotaz, možná obecný k Ajaxu. Můžu v rámci jedné stránky bez reloadu odeslat a přijmout více požadavků na server? Mám stránkách vyhledávání před jQuery quickSearch. Najedu na stránku, ta se načte. A nyní pokračuju bez reloadu. Začnu psát vyhledávací slovo. Přes jQuery hlídám počet napsaných znaků a až uživatel napíše znak třetí, odešlu Ajaxem na server POST požadavek v těmito třemi znaky. Tam bude SQL dotaz, který vyhledá produkty s těmito třemi písmeny a odešle výsledek uživateli. A tento výsledek se pak zobrazí v našeptávači u vyhledávání. Zatím mi to funguje tak, že do vyhledávání nacpu všechny produkty a ony se pomocí jQuery quickSearch třídí. To ale zabírá hodně paměti. Je totiž zbytečné vybírat všechny produkty hned na začátku. Kód vypadá takto: <input autocomplete="off" id="searchInput" class="tl-hledat" size="20" type="text" name="vyhledat" value="<?php if (isset($g_vyhledat)) echo htmlspecialchars($g_vyhledat);?>" /> <table class="searchContent"> <?php $sql = mysql_query("SELECT m.nazev as nazev, m.id, f.file FROM produkty m LEFT JOIN produkty_foto f ON f.id_produkt = m.id GROUP BY m.id ORDER BY m.nazev") or die (mysql_error()); ?> <?php while($row_hledej = mysql_fetch_object($sql)){ ?> <tr> <?php echo '<td><img src="'.__URL__.'img_produkty/male/'.$row_hledej->file.'"></td>'; echo '<td><a href="'.ZjistiUrl($row_hledej->id).'" title="'.$row_hledej->nazev.'">'.$row_hledej->nazev.'</a></td>'; ?> </tr> <?php } ?> </table> JavaScript: $(document).ready(function(){ quickSearchInit('searchInput','searchContent'); }); function quickSearchInit(searchInput,searchContent){ if(document.getElementById(searchInput)){ $('input#'+searchInput).quicksearch('table.'+searchContent+' tr'); $('input#searchInput').keyup(function(){ $('table.'+searchContent).show(); }); $("body").click(function(e){ var target = $(e.target); if(!target.is("input#"+searchInput)){ if($('table.'+searchContent).is(':visible')){ $('table.'+searchContent).fadeOut(400); } } }); } } Chtěla bych už do toho SQL dotazu nacpat alespoň první 3 vyhledávané znaky, aby těch výsledků nebylo hned tolik. Asi jako mají vyhledávání na těchto stránkách: http://www.po-bp.cz/ Jde to nějak udělat? Moc děkuju. |
||
Michel Profil |
#2 · Zasláno: 8. 9. 2011, 15:37:15 · Upravil/a: Michel
Hledá to hned, ale to nebude problém upravit: w3schools.com
|
||
stepanka Profil * |
#3 · Zasláno: 8. 9. 2011, 15:43:34
Michel:
Děkuju za reakci, ale to řešení, které uvádíš, už víceméně mám. Že by se mi to chtělo předělávat na XML, abych se dostala do bodu, ve kterém jsem teď, to moc ne :) Nebo se pletu? Je v těch řešeních nějaký podstatný rozdíl? |
||
Michel Profil |
#4 · Zasláno: 8. 9. 2011, 16:25:30
stepanka:
To jsem nemyslel, abys to předělávala do xml. Já jen, že na řádku 11 v php souboru toho příkladu si nastavíš, od kolika znaků to bude hledat. if (strlen($q)>0) Práce s databází je kdyžtak o dvě lekce zpět - tady. |
||
stepanka Profil * |
#5 · Zasláno: 8. 9. 2011, 16:46:07
Michel:
Oba příklady, které jsi uvedl, jsou typu toho mého, tzn. nejdříve vyberu všechny záznamy z databáze a pak se rozhoduju, co s nima. Já bych právě chtěla napasovat prvních pár znaků do toho SQL dotazu, aby už při prvotním vyhledání jich nebylo tolik. Ale to by prohlížeč a server museli neustále spolupracovat, protože uživatel může řetězec měnit. Možná se špatně vyjadřuju, a možná taky chci něco, co ani nejde.. |
||
o_O Profil |
#6 · Zasláno: 8. 9. 2011, 19:05:47
stepanka:
„protože uživatel může řetězec měnit“ Co takto ukládat poslední čas změny řetězce a díky toho pak naplánovat další dotaz na server? V případě změny by se pak odpočet restartoval. |
||
motik Profil |
#7 · Zasláno: 8. 9. 2011, 19:10:08
stepanka:
„aby už při prvotním vyhledání jich nebylo tolik.“ tak dej do dotazu LIMIT |
||
Časová prodleva: 4 dny
|
|||
stepanka Profil * |
#8 · Zasláno: 12. 9. 2011, 09:17:21
o_O:
Děkuji za reakci, ovšem to neřeší můj problém, jak do dotazu nacpat něco, co uživatel na stránce zadal a bez reloadu to má přejít na server, vykonat a výsledek dojít zpátky. motik: „tak dej do dotazu LIMIT“ Ne, to je nesmysl, to by bylo vyhledávání v 10ti (20ti, 30ti,...) produktech, já potřebuju prohledat všechny. |
||
Časová prodleva: 13 let
|
0