Avatar billede jannikf Nybegynder
18. september 2006 - 19:27 Der er 6 kommentarer og
1 løsning

AJAX live search

Som overskriften antyder så er jeg i gang med at lave en live search funktion primært for at forstå lidt mere at javascript og sætte mig ind i AJAX tankegangen.

Jeg har fulgt W3's tutorial og det virker fint, men støder i et problem når min eksterne fil skal hente fra en db i stedet for blot forudbestemte array's.

Min "hovedside" ser sådan ud:
<script type="text/javascript">

var xmlHttp

function showHint(str)
{
if (str.length==0)
{
document.getElementById("txtHint").innerHTML=""
return
}
xmlHttp=GetXmlHttpObject()
if (xmlHttp==null)
{
alert ("Browser does not support HTTP Request")
return
}
var url="results.asp"
url=url+"?q="+str
xmlHttp.onreadystatechange=stateChanged
xmlHttp.open("GET",url,true)
xmlHttp.send(null)
}

function stateChanged()
{
if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
{
document.getElementById("txtHint").innerHTML=xmlHttp.responseText
}
}

function GetXmlHttpObject()
{
var objXMLHttp=null
if (window.XMLHttpRequest)
{
objXMLHttp=new XMLHttpRequest()
}
else if (window.ActiveXObject)
{
objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP")
}
return objXMLHttp
}

</script>
</head>
<body>

<form>
First Name:
<input type="text" id="txt1" onkeyup="showHint(this.value)">
</form><p>Suggestions: <span id="txtHint"></span></p>


Og min eksterne fil ser sådan ud:

<!--#include file="includes/connect.asp"-->
<%

strSog = Request.QueryString("q")
strSQL = "SELECT * FROM content where tekst like '%" & strSog & "%' or headline like '%" & strSog & "%'"
set rs = Conn.Execute(strSQL)
Do while not rs.EOF
Response.Write "<a href=""http://www.jblog.dk/arkiv/" & rs("id") & "/"">" & rs("headline") & "</a><br>"
rs.Movenext
Loop
rs.Close
set rs = Nothing
%>

<!--#include file="includes/close.asp"-->

Umiddelbart ville jeg tro at det forholder sig på samme måde som med array's, der fungerede fint, men den melder altså fejl. Jeg kan få den til at virke efter hensigterne, dog uden æøå (tager jeg fat i senere), men næsten halvdelen af gangene melder den om kørselsfejl. Hvad i alverden er der galt? Er det forkert at bruge include i en ekstern fil?

Det skal lige siges at jeg har fjernet <html> osv fra ovenstående.
Avatar billede olebole Juniormester
20. september 2006 - 10:47 #1
<ole>

Hvis du med "W3's tutorial" mener w3schools.com's tutorial, så har den ikke meget med AJAX at gøre ... forfatteren har vist ikke fattet ret meget af teknikken  :o|

Hovedidéen med AJAX er kun at udveksle rå data mellem klient og server. Al HTML-formatering foretages på klienten, hvor elementer oprettes med DOM, fyldes med data og indsættes i sidens DOM.

Prøv at søge lidt på nettet, hvor der ligger masser af langt bedre tuts om AJAX  ;o)

/mvh
</bole>
Avatar billede jannikf Nybegynder
20. september 2006 - 16:07 #2
Jamen er det ikke også det jeg gør? Den rå date kommer fra en database som så bliver sendt over i den side som efterspørger den via xmlhttprequest. Nå men det virker ihvertfald efter hensigterne nu. Problemet, som jeg nu er blevet ret sikker på, er cliche servere, som ofte laver en trappable error ved tilgang til siden. Dette kan afløses ved at opdatere igen og sker egentlig kun ca. hver 5 gang når det er værst. Problemet er ovre nu, men regner med at det kan begynde når som helst igen. Se evt. et eksempel her: http://www.jblog.dk og så er det søgefunktionen i højre side. Ja der er hugget fra spotlight :).
Avatar billede olebole Juniormester
21. september 2006 - 13:48 #3
Så vidt jeg kan se, formaterer du netop HTML'en på serveren. Sender du ikke netop en række a- og br-elementer tilbage til klienten? Det er sådan, man _ikke_ laver AJAX  =)
Avatar billede jannikf Nybegynder
21. september 2006 - 15:42 #4
Ah okay.. nu forstår jeg :), men hvordan sender jeg så blot udelukkende data? Det skal jo være links og styles. Eller rettere kan du komme med et eksempel på hvordan det en live search så skulle ordnes?
Avatar billede olebole Juniormester
21. september 2006 - 15:50 #5
Det er nok lettere at finde en god tutorial på WWW (hvis ikke svaret skal blive meget langt). Du bør finde en tut, hvor man sender data retur som XML eller JSON (JavaScript Object Notation)  =)
Avatar billede jannikf Nybegynder
21. september 2006 - 15:55 #6
Ah okay.. tror det var nok for mig. Med min eksterne fil skal jeg autogenere en xml-fil som jeg så efterfølgende kan behandle. Hvis det er rigtigt forstået, så siger jeg mange tak :).
Avatar billede jannikf Nybegynder
21. oktober 2006 - 17:07 #7
Jeg havde ret. Det var såmænd cliche's servere. Problemet er indtil nu ikke kommet frem igen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Ingeniør til Satellitkommunikation

Netcompany A/S

Managing Architect

KMD A/S

Projektleder