Just nu i M3-nätverket
Jump to content

AJAX fungerar inte....


_Peter_Nilsson_

Recommended Posts

_Peter_Nilsson_

Jag hade tänkt att testa det här med AJAX och hittade en färdig skriven lösning på nätet. En lösning som vid första titten skulle lösa mina problem.

 

Efter lite mekkande så testade jag den lokalt på min dator (XP med IIS).... det fungerade inte. Jag la upp hela rasket på en webserver.... fungerade inte där heller. Krävs det något av servern eller i min dator i form av tillägg eller inställning för att XML/AJAXen ska fungera ?????? ELLER är det nått som jag gör fel ? Är inte riktigt hemma på det här med AJAX ... ännu :(

 

Första sidan ser ut så här:

 

<html>
<head>
<script language="javascript">
var xmlHttpfunction showCustomer(str)
{ 
xmlHttp=GetXmlHttpObject();

if (xmlHttp==null)
 {
 alert ("Your browser does not support AJAX!");
 return;
 }
var url="getdatum_xml.asp";
url=url+"?q="+str;
url=url+"&sid="+Math.random();
xmlHttp.onreadystatechange=stateChanged;
xmlHttp.open("GET",url,true);
xmlHttp.send(null);
}function stateChanged() 
{ 
if (xmlHttp.readyState==4)
{
var xmlDoc=xmlHttp.responseXML.documentElement;
document.getElementById("Lopp").innerHTML=
xmlDoc.getElementsByTagName("Lopp")[0].childNodes[0].nodeValue;
document.getElementById("Datum").innerHTML=
xmlDoc.getElementsByTagName("Datum")[0].childNodes[0].nodeValue;
}
}

function GetXmlHttpObject()
{
var xmlHttp=null;
try
 {
 // Firefox, Opera 8.0+, Safari
 xmlHttp=new XMLHttpRequest();
 }
catch (e)
 {
 // Internet Explorer
 try
   {
   xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
   }
 catch (e)
   {
   xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
   }
 }
return xmlHttp;
}
</script>
</head>
<body>

<%
Set Connection = Server.CreateObject("ADODB.Connection")
Connection.Open "driver={Microsoft Access Driver (*.mdb)};DBQ=" & server.mappath("DATABAS.mdb")
SQLStmt = "SELECT * FROM TABELL1 ORDER BY Datum"
Set RS = Connection.Execute(SQLStmt)
%>


<form action=""> 
Välj datum:
<select name="customers" onchange="showCustomer(this.value)">
                   <option value="">--- Välj datum ---</option>
<%Do Until RS.EOF%>
                   <option value="<%=RS("Datum")%>"><%=RS("Datum")%></option>
<%
RS.MoveNext
Loop
RS.Close
Connection.Close
%>
</select>
</form>
<b>
<span id="companyname"></span></b><br />
<span id="contactname"></span><br />
</html>

 

 

 

getdatum_xml.asp ser ut så här:

 

<%
response.expires=-1
response.contenttype="text/xml"sql="SELECT * FROM TABELL2 "
sql=sql & " WHERE Datum='"&request.querystring("q")&"'"

on error resume next
set conn=Server.CreateObject("ADODB.Connection")
conn.Provider="Microsoft.Jet.OLEDB.4.0"
conn.Open(Server.Mappath("DATABAS.mdb"))
set rs=Server.CreateObject("ADODB.recordset")
rs.Open sql, connif err <> 0 then
response.write(err.description)
set rs=nothing
set conn=nothing
else

response.write("<?xml version='1.0' encoding='ISO-8859-1'?>")
response.write("<company>")
response.write("<Datum>" &rs.fields("Datum")& "</Datum>")
response.write("<Lopp>" &rs.fields("Lopp")& "</Lopp>")
response.write("</company>")
end if
on error goto 0
%>

 

Vad är fel ?? är det servern eller koden ?

 

[inlägget ändrat 2008-12-01 00:32:37 av _Peter_Nilsson_]

Link to comment
Share on other sites

Lättast är ju om du felsöker.

Kör getdatum_xml.asp ensamt. Fungerar den så gå till javascriptet.

Kolla om du får svar när den andra filen anropas genom att skriva ut en alert.

 

Felsökning 101, helt enkelt.

 

Bland annat hittade jag ett fel på denna rad:

s.Open sql, connif err <> 0 then

Du vet säkert vad du skall göra..

 

[inlägget ändrat 2008-12-01 08:21:35 av Jonas_Bo]

Link to comment
Share on other sites

_Peter_Nilsson_

Har kört getdatum_xml.asp ensamt och det verkar (i mina ögon iallafall) som att den delen fungerar. Vad jag är mindre säker på är om javascriptet funkar.. dvs om den skickar över värdet och ifall den tar tillbaka resultat från ASP sidan.

 

Var i scriptet är det lämpligast att lägga in en alert ?

 

<html>
<head>
<script language="javascript">
var xmlHttpfunction showDatum(str)
{ 
xmlHttp=GetXmlHttpObject();

if (xmlHttp==null)
 {
 alert ("Your browser does not support AJAX!");
 return;
 }


var url="getlopp.asp";
url=url+"?Datum="+str;
url=url+"&sid="+Math.random();
xmlHttp.onreadystatechange=stateChanged;
xmlHttp.open("GET",url,true);
xmlHttp.send(null);
}function stateChanged() 
{ 
if (xmlHttp.readyState==4)
{
var xmlDoc=xmlHttp.responseXML.documentElement;
document.getElementById("Loppen").innerHTML=
xmlDoc.getElementsByTagName("Lopp")[0].childNodes[0].nodeValue;
document.getElementById("Datumen").innerHTML=
xmlDoc.getElementsByTagName("Datum")[0].childNodes[0].nodeValue;
}
}

function GetXmlHttpObject()
{
var xmlHttp=null;
try
 {
 // Firefox, Opera 8.0+, Safari
 xmlHttp=new XMLHttpRequest();
 }
catch (e)
 {
 // Internet Explorer
 try
   {
   xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
   }
 catch (e)
   {
   xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
   }
 }
return xmlHttp;
}
</script>
</head>
<body>

<%
Set Connection = Server.CreateObject("ADODB.Connection")
Connection.Open "driver={Microsoft Access Driver (*.mdb)};DBQ=" & server.mappath("..\..\Db\DATABAS.mdb")
SQLStmt = "SELECT * FROM TABELL1 ORDER BY Datum"
Set RS = Connection.Execute(SQLStmt)
%>


<form action=""> 
Välj datum:
<select name="Datum" onchange="showDatum(this.value)">
                   <option value="">--- Välj datum ---</option>
<%Do Until RS.EOF%>
                   <option value="<%=RS("Datum")%>"><%=RS("Datum")%></option>
<%
RS.MoveNext
Loop
RS.Close
Connection.Close
%>
</select>
</form>
<HR>
<span id="Loppen"></span></b><br />
<span id="Datumen"></span><br />
</html>

 

[inlägget ändrat 2008-12-01 12:02:30 av _Peter_Nilsson_]

Link to comment
Share on other sites

Du, nu hittar jag fler allvarliga fel i javascriptkoden.

Det är radbrytningar som ställer till det. Kolla gärna in javascriptfelen som dyker upp. Får du inga fel så har du nog bara inte ställt i att webbläsaren skall varna vid javascript-fel.

 

 

var xmlHttpfunction showDatum(str) <--- FEEEL

 

 

var xmlHttp; //ny rad här

function showDatum(str)

 

 

 

Link to comment
Share on other sites

_Peter_Nilsson_

åhhhh... du är en ängel..... nu kom javascriptet igång iallafall

 

fast nu brottas jag följd fel.... jag återkommer snart

 

Link to comment
Share on other sites

_Peter_Nilsson_

Mina sidor består av 2 stycken. Lek0001.asp - som innehåller javascriptet och där man kan välja ett datum.

 

Det datum man väljer där skickas via javascriptet till sidan getlopp.asp. På getlopp.asp finns som sagt databaskopplingen som ska sökas igenom och ta fram allt som har med detta datum att göra.

 

Resultatet presenteras i en xml lista (eller vad jag nu ska kalla den.)

Resultatet på getlopp.asp när jag kör denna sida seperat ser ut så här:

 

<?xml version="1.0" encoding="ISO-8859-1" ?>

- <Lopp>

<Lopp>Buss</Lopp>

<Datum>2008-11-24</Datum>

<Lopp>Bussen</Lopp>

<Datum>2008-11-24</Datum>

</Lopp>

 

Detta resultat är korrekt.

 

Vart bindestrecket före <Lopp> kommer ifrån vet jag inte.... det finns inte med i källkoden... skumt

 

Hur som hest...

Databasen presenterar vad den hittade enligt listan ovanför...... så långt är allt väl. MEN om man tittar på den sidan som man egentligen ska se resultat på (resultatet från databasen) så ser listan bara ut så här:

 

Mitt lopp

2008-11-20

 

Med andra ord så loopas det inte ut vad som egentligen hittades utan bara den första databas träffen visas.

 

Varför ? och framför allt hur visar jag på min första sida vad som verkligen hittades...?

 

[inlägget ändrat 2008-12-02 01:43:20 av _Peter_Nilsson_]

[inlägget ändrat 2008-12-02 01:44:27 av _Peter_Nilsson_]

[inlägget ändrat 2008-12-02 01:45:02 av _Peter_Nilsson_]

Link to comment
Share on other sites

document.getElementById("Loppen").innerHTML=
xmlDoc.getElementsByTagName("Lopp")[0].childNodes[0].nodeValue;
document.getElementById("Datumen").innerHTML=
xmlDoc.getElementsByTagName("Datum")[0].childNodes[0].nodeValue;

 

Du har själv angivit att endast det första indexet (childNodes[0]) skall hämtas.

 

Du får kolla antalet index i datan (childNodes) och loopa genom dem för att uppnå önskat resultat.

 

Link to comment
Share on other sites

for(i==0;i=xmlDoc.getElementsByTagName("Lopp").Length-1; i++){
// lägg till  en option med dess value här.
}

 

Testa att googla, Det fungerar bra för mig.

 

 

 

[inlägget ändrat 2008-12-02 13:09:44 av Jonas_Bo]

Link to comment
Share on other sites

_Peter_Nilsson_

jag har googlat så fingrarna glöder..... ;)

 

Jag är inne på 3´dje veckan för att kunna lösa mitt problem...

 

 

 

lägg till en option med dess value här.

 

Hur ser det ut ?

[inlägget ändrat 2008-12-02 14:13:46 av _Peter_Nilsson_]

Link to comment
Share on other sites

for(i==0;i=xmlDoc.getElementsByTagName("Lopp").Length-1; i++){

 

Mer korrekt syntax är:

for(i=0;i<=xmlDoc.getElementsByTagName("Lopp").length; i++){

 

[inlägget ändrat 2008-12-03 02:10:17 av Micke_skane]

Link to comment
Share on other sites

_Peter_Nilsson_

Jag ska använda mej av raden OK:

for(i==0;i=xmlDoc.getElementsByTagName("Lopp").Length-1; i++){

// lägg till en option med dess value här.

}

Men var ska lägga in det ?????

Ska jag ta bort dessa rader:

 

var xmlDoc=xmlHttp.responseXML.documentElement;

document.getElementById("Loppen").innerHTML=

xmlDoc.getElementsByTagName("Lopp")[0].childNodes[0].nodeVal

ue;

document.getElementById("Datumen").innerHTML=

xmlDoc.getElementsByTagName("Datum")[0].childNodes[0].nodeVa

lue;

}

}

 

Jag fattar nada........

 

Jag e tacksam för den hjälp jag fått än sålänge....... men jag är inte riktigt med på vad jag ska lägga in var.....

 

[inlägget ändrat 2008-12-04 01:02:32 av _Peter_Nilsson_]

Link to comment
Share on other sites

_Peter_Nilsson_

 

 

 

Adressen jag fick: http://www.plus2net.com/javascript_tutorial/list-adding.php har jag varit inne och titta på. Intressant läsning men jag förstår inte hur detta skulle lösa mina problem. Att lägga till en option... men hur får jag över mina värden i xml listan till en option och value....

 

Min xml lista kan bestå av allt från 1 till 15 poster. Det är olika och variera ganska mycket.

 

XML listan som skapas av databasen är en lista som skapas beroende på vilket val jag gjorde på sidan före (val jag gör i en dropdown meny). XML listan ser ut så här:

<?xml version="1.0" encoding="ISO-8859-1" ?>

- <Lopp>

<Lopp>Mitt lopp</Lopp>

<Datum>2008-11-20</Datum>

<Lopp>ditt lopp</Lopp>

<Datum>2008-11-20</Datum>

<Lopp>nånn annans lopp</Lopp>

<Datum>2008-11-20</Datum>

</Lopp>

 

och denna lista ska över igen till ursprungssidan.. dvs sidan med javascriptet eller om jag förstår det här rätt... javascriptet ska hämta tillbaka det.

 

Tanken är sedan att javascriptet ska stoppa in värdena i en annan dropdown meny som jag har på sidan.

 

Mitt problem är att javascriptet loopar inte igenom XML listan och visar alla värdena utan tar bara den första posten.

 

Därför måste jag ju använda raden som jag fick ett par inlägg högre upp (for(i=0;i<=xmlDoc.getElementsByTagName("Lopp").length; i++){).. så långt är jag med...... men hur och framför allt Var ska denna rad in ? och nästa fråga är Vad ska den kombineras med för att det ska funka ?

 

[inlägget ändrat 2008-12-04 01:03:45 av _Peter_Nilsson_]

Link to comment
Share on other sites

Du fick en lösning dock inte framdukat.

 

Vad är problemet?

Kan du inte göra loopen eller kan du inte stoppa in värdena i select-elementet?

Hur mycket har du testat och provat själv?

 

På internet finns alla lösningar att tillgå, men det finns sällan en helt färdig lösning då du måste anpassa för att det skall passa just ditt projekt.

 

Link to comment
Share on other sites

_Peter_Nilsson_

problemet är att jag inte är så vass på javascript.

Jag har försökt att fixa till det själv utan att få till det......

 

Tro mej när jag säger att jag har försökt trots mina väldigt blygsamma kunskaper i javascript....

 

Jag har läst igenom den ena sidan efter den andra. Hittat en lösning som verkat fungerat och gjort en del försök till ändringar bara för att upptäcka att jacascriptet inte fungerade.....

 

Link to comment
Share on other sites

  • 2 weeks later...
_Peter_Nilsson_

hmm....

 

Jag har trixat & mixat ....

Fick ihop en lösning men då fick jag allt ur databasen utskrivet i en enda lång text.....

 

Har dammsugit nätet efter lösningar utan resultat... kanske letar på fel ställe... någon som har förslag ?

 

Link to comment
Share on other sites

om du får ut hela databastabellen är det SQL-strängen som är fel.

 

Se till att den SQL är korrekt innan du tillämpar den i en webapplikation.

 

Link to comment
Share on other sites

_Peter_Nilsson_

men.... min sida hämtar en XML lista som den egentligen skulle ha loopat igenom....

 

Fast antingen så får jag en enda lång textsträng av hela xml listan eller så så får jag bara ut första posten......

 

Link to comment
Share on other sites

att xml-listan blir en sträng är nog inte problemet. Den kanske inte tolkar xml som den skall?!

har du samma charset på alla filer?

 

 

Visa hur du gjort xml-en och hur din loop nu ser ut.

 

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...