06. marts 2011 - 21:20Der er
17 kommentarer og 1 løsning
Ajax og JavaScript fejl
Jeg har et JS script som virker fint indtil jeg skal bruge det på data jeg har hentet med AJAX - så får jeg fejl. Fejl: 'null' er null eller ikke et objekt.
i linjerne: if (m !="") {text.className = "cal_post";} og if (m !="") {text.className = "cal_post_Active";}
Jeg kan se, at 'className' bliver Null på de data der er hentet gennem AJAX, men ved ikke hvorfor - er der nogen der har et bud på en løsning??
function toggle(n,m,tekst) { var ele = document.getElementById(n); var text = document.getElementById(m); if(ele.style.display == "block") { if (document.FormCalendar.Submit.value == "Opdater"){
ja, flg kode kalder funktionen og modtager output. Flg bliver samtidig også hentet gennem AJAX, og det er kun når jeg henter det gennem Ajax jeg får fejlen.
Værdierne er nøjagtig de samme hvad enten det er noget kode der er hentet gennem ajax som kalder funktionen eller om det er noget kode som er på siden on load.
Ja, du bruger jo innerHTML - og så kommer man let til at overskrive referencer m.m.
Bruger man Ajax, formateres data som JSON eller XML på serveren. Når de ankommer til browseren, formateres data og indsættes med DOM i dokumentet. Det er således nok ikke Ajax, du bruger, men noget fra en af de mange turotial forfattere, der ikke selv har forstået hat af, hvad Ajax er ;o)
Vil du bruge Ajax, bør du sætte dig rigtig grundigt ind i JavaScript, DOM, CSS (og evt. XML) - samt et serversprog
Du kan prøve dette eksempel og se, hvad der sker, når man ukritisk bruger innerHTML:
<script type="text/javascript"> function fooBar() { // Opret en reference til divet 'bar' var oBar = document.getElementById("bar"); alert(oBar.innerHTML);
// Tilføj noget ekstra indhold i divet 'foo' document.getElementById("foo").innerHTML += "<div>Endnu et div</div>"; oBar.innerHTML = "noget andet";
// Divet 'bar' er nu overskrevet - og 'oBar' ligger og roder i hukommelsen alert(oBar.innerHTML);
// Divet med id="bar" er i virkeligheden et nyt div // - magen til det, du lige har overskrevet alert(document.getElementById("bar").innerHTML) } </script>
<div id="foo">Dette er divet foo <div id="bar">Dette er divet bar</div> </div>
Du kan også teste denne kode i Firefox, Opera eller Safari:
<script type="text/javascript"> function fooBar() { document.getElementById("foo").innerHTML += "<div>Endnu et div</div>"; } </script>
<div id="foo"> <input id="bar" type="text" value="Skriv noget her ..."> </div>
<p>Skriv noget i feltet og tryk på knappen - og læg mærke til, at det du skrev slettes i browsere, der overholder denne del af standarderne (= alle andre end IE)</p>
Der er ingen tvivl om, at du overskriver noget. Ellers mister du ikke referencen til elementet. Jeg er ganske sikker på, du overskriver noget i forbindelse med det såkaldte 'Ajax'.
Det eneste fornuftige forslag, jeg kan komme i tanker om, skrev jeg ovenfor: "Vil du bruge Ajax, bør du sætte dig rigtig grundigt ind i JavaScript, DOM, CSS (og evt. XML) - samt et serversprog"
Scriptet jeg bruger til ajax er bare det standard som ligger på w3school's side
min serverside laver et SQL kald og looper som flg:
while not rs.eof dato = rs("Dato_start") if dato<> "" then dato = FormatDateTime(dato, vbShortDate) if len(rs("Dato_start"))>10 then tid = FormatDateTime(rs("Dato_start"), vbShortTime) format="style=""padding-left:1px;""" else tid ="" format="style=""padding-left:36px;""" end if end if
if rs("kalender.Beskrivelse")<>"" then output=output&"<span id=""cal_besk"&rs("kalender.id")&""">"&rs("kalender.Beskrivelse")&"</span>" else output=output&"<span id=""cal_besk"&rs("kalender.id")&""">Ingen beskrivelse!</span>" output=output&"<div align=""right"" style=""padding-top:5px;""> (Oprettet "&rs("Kalender.Oprettet")&" af "&rs("Fornavn") if isnull(rs("medlem_id")) or rs("medlem_id")=0 then output=output&"ukendt" if rs("kalender.opdateret")<>"" then output=output&", opd: "&rs("kalender.opdateret") output=output&")<br />[<a href=""java script:void(0);"" onClick=""java script:updateCalendar('"&rs("kalender.id")&"');"">Rediger</a> | <a href=""update.asp?method=Delete&id="&rs("kalender.id")&""" onclick=""return confirm('Bekræft sletning af denne post. Du kan ikke fortryde!')"">Slet</a>]</div></div><div style=""background-image:url('pic/grafik/btn_cal.gif'); z-index:100; height:10px; background-repeat:no-repeat;margin-bottom:10px;""> </div></div>"
dato = "" tid = "" format="" rs.MoveNext Wend response.write output
Ja, w3schools.com er et af de sites, du virkelig skal passe på! Det propfyldt med alvorlige fejl, mangler og misforståelser. Vi har ved flere lejligheder her på Eksperten fundet op til 4-6 seriøse fejl pr. side ... hvilket er skræmmende meget, når man tænker på, hvormeget hans reklamer fylder i forhold til det egentlige indhold.
Specielt hans Ajax tutorial er én lang gang vås, som ikke har en k*ft med Ajax at gøre! Til gengæld er sitet ekstremt populært, hvilket medfører at kun de færreste har idé om, hvad Ajax er.
Netop på w3schools.com får man helt fejlagtigt fornemmelsen af, at data skal HTML formateres på serveren og indsættes i browseren med innerHTML. Gør man det, spilder man oceaner af server ressourcer - og som du selv har opdaget, så ødelægger det ofte resten af ens scripting, hvis man ikke er helt skarp i JS
Nej, du må begynde med at finde ud af, hvad DOM er. At forklare dig fra bunden, hvad Ajax er, og hvordan det bruges, tager lang tid og er slet ikke egnet for en E-tråd. Webkodning er et fag, man ikke lærer ved et par Google-opslag og et kvarter på Facebook =)
fandt ikke det jeg søgte, men hvis i vil have point, så smid et svar
Synes godt om
Ny brugerNybegynder
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.