|
| AJAX og ASP Fra : Christian R. Larsen |
Dato : 09-01-08 14:36 |
|
Jeg har lavet en søgefunktion på mit site, hvor man live får vist mulige
søgeresultater i et layer ved siden af søgefeltet. Altså sådan at man får
vist alle ord, der indeholde rden bogstavkombination, man hidtil har
indtastet.
Jeg har lavet det ved at generere et javascript-array med de mulige
søgeresultater on load. Når så brugere indtaster, går den ind og kigger i
dette array.
Jeg synes dog ikke, det er særlig elegant, og det performer heller ikke så
fanntastisk, fordi klienten lige skal stå og generere dette array.
Hvordan laver man egentlig sådan noget smartest?
| |
Stig Johansen (09-01-2008)
| Kommentar Fra : Stig Johansen |
Dato : 09-01-08 15:12 |
|
Christian R. Larsen wrote:
> Jeg har lavet en søgefunktion på mit site, hvor man live får vist mulige
> søgeresultater i et layer ved siden af søgefeltet. Altså sådan at man får
> vist alle ord, der indeholde rden bogstavkombination, man hidtil har
> indtastet.
>
> Jeg har lavet det ved at generere et javascript-array med de mulige
> søgeresultater on load. Når så brugere indtaster, går den ind og kigger i
> dette array.
>
> Jeg synes dog ikke, det er særlig elegant, og det performer heller ikke så
> fanntastisk, fordi klienten lige skal stå og generere dette array.
>
> Hvordan laver man egentlig sådan noget smartest?
Overordnet:
Lav en timer i JS, der er aktiv når der er fokus på søgefeltet.
Hver gang timeren trigges, tjek om
1) Søgefeltet er ændret
2) Værdien er 'lang nok' til at udføre søgning.
Hvis disse 2 er opfyldt, så lav en (AJAX) request med ca SQL:
'SELECT Værdier FROM Søgetabel WHERE DitFelt LIKE' + (Værdien fra dit HTML)
+ '% ORDER BY DitFelt'
Resultatet smider du så ind i din 'layer'.
Med pkt. 2 kan du vælge om du vil starte med 1 bogstav eller flere.
Afhængig hvor store dine resultater må blive.
--
Med venlig hilsen
Stig Johansen
| |
Christian R. Larsen (09-01-2008)
| Kommentar Fra : Christian R. Larsen |
Dato : 09-01-08 15:24 |
|
"Stig Johansen" <stig_johansen_it_at_=(@)hotmail.com> wrote in message
news:4784d739$0$90273$14726298@news.sunsite.dk...
> Overordnet:
> Lav en timer i JS, der er aktiv når der er fokus på søgefeltet.
> Hver gang timeren trigges, tjek om
> 1) Søgefeltet er ændret
> 2) Værdien er 'lang nok' til at udføre søgning.
Hvorfor ikke bare trigge javascriptet onchange på søgefeltet? Det er sådan,
jeg har lavet det nu, og det virker jo fint.
> Hvis disse 2 er opfyldt, så lav en (AJAX) request med ca SQL:
> 'SELECT Værdier FROM Søgetabel WHERE DitFelt LIKE' + (Værdien fra dit
> HTML)
> + '% ORDER BY DitFelt'
> Resultatet smider du så ind i din 'layer'.
Hvordan skulle det kunne virke?
Jeg kan vel kun få fat i databasen serverside, og det er vel netop for sent,
når vi er nået til det punkt, hvor vi skal til at detecte ændringer i
søgefeltet. Eller hvad?
| |
Stig Johansen (10-01-2008)
| Kommentar Fra : Stig Johansen |
Dato : 10-01-08 07:48 |
|
Christian R. Larsen wrote:
> "Stig Johansen" <stig_johansen_it_at_=(@)hotmail.com> wrote in message
> news:4784d739$0$90273$14726298@news.sunsite.dk...
>> Overordnet:
>> Lav en timer i JS, der er aktiv når der er fokus på søgefeltet.
>> Hver gang timeren trigges, tjek om
>> 1) Søgefeltet er ændret
>> 2) Værdien er 'lang nok' til at udføre søgning.
>
> Hvorfor ikke bare trigge javascriptet onchange på søgefeltet? Det er
> sådan, jeg har lavet det nu, og det virker jo fint.
Det kan man også. Det er smag og behag og brugeroplevelser.
Personlig kan jeg godt lide at kunne 'nå' at taste flere tegn inden
resultaterne popper op. På samme måde kan jeg også godt lide at kunne 'nå'
at rette slåfejl.
Hvorvidt det er lettest med en timer eller onchange må du selv afgøre.
>> Hvis disse 2 er opfyldt, så lav en (AJAX) request med ca SQL:
>> 'SELECT Værdier FROM Søgetabel WHERE DitFelt LIKE' + (Værdien fra dit
>> HTML)
>> + '% ORDER BY DitFelt'
>> Resultatet smider du så ind i din 'layer'.
>
> Hvordan skulle det kunne virke?
AJAX, som du skriver i subject.
Jeg kan ikke udlede om du bruger AJAX i forvejen eller ej.
> Jeg kan vel kun få fat i databasen serverside, og det er vel netop for
> sent, når vi er nået til det punkt, hvor vi skal til at detecte ændringer
> i søgefeltet. Eller hvad?
Ca. pseudo kode
'OnChange':
1) Byg en XMLHTTPRequest med væredien af søgefeltet
2) Send den til din ASP kode
3) ASP koden udfører søgningen (SQL'et)
4) ASP koden returnerer svaret
5) Klienten bruger en eller anden form for DHTML til at vise resultatet.
Jeg kan ikke se din side, så jeg ved ikke om du bruger div'er tabeller eller
hvad.
Men du skal bare opdatere (DHTML) din 'layer' som du gør i dag, du skal bare
hente værdierne/strengen fra XMLHTTPRequest'et i stedet.
--
Med venlig hilsen
Stig Johansen
| |
|
|