Välkommen till linuxportalen.se!

Linuxportalen.se är Sveriges största och aktivaste webbplats för användare av öppen- och fri programvara.

Du besöker Linuxportalen.se som gäst vilket begränsar din möjlighet att använda webbplatsens alla funktioner. Genom att registera dig som medlem får du inte bara möjlighet att söka bland webbplatsens innehåll, skapa nya och delta i befintliga diskussioner, skapa din egen blogg, kommunicera med andra medlemmar genom privata meddelanden och delta i omröstningar. Du får också tillgång till Veckans Kadavro - en seriestrip unikt skapad för Linuxportalen.se!

Registeringen sker snabbt och är helt kostnadsfri - tveka inte, bli medlem idag!

För lite plats????

Jag har en Nim nummerpresentatör och dess output kan jag se på min hemsida. Fungerar bra tills antalet samtal är 45 st. Då slutar scriptet att skriva till hemsidan.

Scriptet ser ut så här:

<html>
<HEAD><TITLE>Inkomna Samtal</TITLE></HEAD>
<body background="brick.gif" bgproperties="fixed">
<CENTER>
<H1>Samtal ringda till mitt hemnummer.</H1>
<P>
<script type="text/javascript">
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.open("GET","samtal.xml",false);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML;
 
document.write("<table border='1'>");
var x=xmlDoc.getElementsByTagName("ReceivedCall");
for (i=0;i<x.length;i++)
  {
  document.write("<tr><td>");
  document.write(x[i].getElementsByTagName("Date")[0].childNodes[0].nodeValue);
  document.write("</td><td>");
  document.write(x[i].getElementsByTagName("CallerName")[0].childNodes[0].nodeValue);
  document.write("</td><td>");
  document.write(x[i].getElementsByTagName("CallingNumber")[0].childNodes[0].nodeValue);
  document.write("</td></tr>");
  }
document.write("</table>");
</script>
</CENTER>
<P>
</body>
</html>

Hur jag funderar så fattar jag inte varför antalet begränsas till 45 samtal. Xml-filen som scriptet läser startar med två rader och har sedan fem rader per registrerat samtal. Jag vet för lite om kodning för att hitta orsaken. Xml-filen fylls på efterhand men samtalen efter nr 45 visas inte... det verkar vara för lite plats för samtalen.

 

EDIT;

Efter att jag raderade följande post (nr 46):

 

<RecievedCall>

<CallingNumber>Okänt nummer från telestation</CallingNumber>
    <Date>fredag 18 mars 2011 11:41</Date>
    <CallerName />
  </ReceivedCall>

så visas alla samtal ringda till min telefon. Men jag förstår inte vad denna post gör för skillnad. Tidigare slutade visningen vid denna post. Märkligt!!!

Alternativ för kommentarvisning

Välj ditt önskade sätt att visa kommentarerna och klicka på "Spara" för att verkställa dina ändringar.

FoHs bild

Är det det enda okända nummer du fått? I så fall kanske felet ligger vid taggen CallerName som förblir tom. XML-parsning är ju rätt kinkigt och vid läsning av noderna till CallerName så finns det inget, varpå scriptet "crashar"...? Undrar om du inte kan se det i felkonsollen i Firefox: Tools -> Error console

snoopys bild

Jo, så är det nog. Firefox felkonsol säger:

Fel: x[i].getElementsByTagName("CallerName")[0].childNodes[0] is undefined
Källkodsfil: http://xxx.xxx.x.xx/samtal/
Rad: 30

och frågan är hur man löser det. Själv kan jag alldeles för lite av detta. Hade ett otroligt jobb att få ihop scriptet i det skick det nu är.

Det är spritens fel att vi skjuter på svärmor..... och det är spritens fel att vi missar...

FoHs bild

Innan raden

document.write(x[i].getElementsByTagName("CallerName")[0].childNodes[0].nodeValue);

måste man kolla om taggen CallerName har några childnodes med en if-sats antar jag. Vet dock inte vad funktionen kan tänkas heta, men kanske något i stil med

if ( x[i].getElementsByTagName("CallerName")[0].hasChild() ) {
   document.write(x[i].getElementsByTagName("CallerName")[0].childNodes[0].nodeValue);
}

snoopys bild

"CallerName" finns ingen annanstans i scriptet, du ser scriptet i sin helhet överst. Men det har skett något annat idag. Det kom ett samtal där programmet WhosCalling som skapar xml-filen skrev så här:

<ReceivedCall>
    <CallingNumber>072xxxxxxx</CallingNumber>
    <Date>fredag 25 mars 2011 14:45</Date>
    <CallerName>Samtal från null</CallerName>
  </ReceivedCall>

Nu blev CallerName något annat. WhosCalling verkar lite instabilt.... ska kanske vänta och se hur det går. Inte ofta det ringer hemliga CallerName. Idag var andra gången. Det kanske inte heller är fel på scriptet utan WhosCalling-programmet som trasslar? Tror jag lutar åt det....

 

Det är spritens fel att vi skjuter på svärmor..... och det är spritens fel att vi missar...

FoHs bild

"CallerName" finns ingen annanstans i scriptet, du ser scriptet i sin helhet överst.

Förstår inte vad du menar med det, varje ReceivedCall har väl en tagg vid namn CallerName. Åtminstone är det så du har programmerat det.

Det kanske inte heller är fel på scriptet utan WhosCalling-programmet som trasslar? Tror jag lutar åt det....

Skriptet har ingen felkontroll, så även om det inte är fel per se på det så crashar det ju vid minsta "fel" på XML-inputen. Det var därför jag förslog att du kontrollerar i förväg om taggen har några childnodes innan du refererar till dom och vill skriva ut dom. Finns dom inte så blir det ju en null-referens och det kraschar... För HTMLElement finns det åtminstone en hasChildNodes(), du kan ju testa om det finns även för XML-objektet.