01. juli 2002 - 10:38Der er
37 kommentarer og 1 løsning
opdatere en del af en side
hvordan kan man opdatere en del af en side? f.eks en kolonne i en tabel eller en dropdown ? ikke noget med refresh...den skal gøre det uden at hele siden opdatere en gang hver 15 sekund
De fleste virksomheder har efterhånden bevist, at AI virker.
Pilotprojekter leverer resultater. Medarbejdere bruger generative AI-værktøjer. Nye use cases dukker op på tværs af organisationen.
Man kan alternative lave en skjult frame/iframe, hvor man henter data fra serveren også loader det ind i sin tabel, eller drop down eller noget, så ser man ikke reloadet...!
Det kan du godt, men det bliver rimelig langhåret. skal den opdateres fra en url? det gætter jeg ligesom på ellers er det ret meningsløst. Denne hersens funktion henter en streng fra en URL via http
function readFile(url) { var req; if (document.all){ req = new ActiveXObject("Microsoft.XMLHTTP"); } else if (document.getElementById && !document.all){ req = new XMLHttpRequest(); } else { return false; } req.open("GET",url,false); req.send(null); return req.responseText; }
Den udbygger vi så timer= 0; refresh = function() {} refresh.start = function() { document.getElementById('dinTR').innerHTML = readFile('dinurl.asp'); timer = window.setTimeout(refresh.start, 15000); //15 ms } refresh.stop = function() { window.clearTimeout(timer); timer = 0; }
Du kan så give det element du vil 'refreshe' id='dinTR' og starte funktionen med refresh.start(); og slutte igen men refresh.stop();
ActiveX er lokal kompileret kode. Man behøver ikke hente det, men enkelte har slået det fra p.g.a. sikkerhed. Det skal man lige tage højde for. Til gengæld duer det super duper bravo i NS6 (for hvad det er værd).
Øhhhh, det er vist kun Microsoft's activeX'ere der er ikke skal hentes. Ellers skal man jo instl. komponentet første gang siden vises... Men at det virker i NS6 er da fint..!
Det er rigtigt nok, men der er ikke nogen grund til at anvende XML-parsere når det skal hentes som plain text. (Jeg regner med at du mener MSXML2.XmlHttp MSXML.XmlHttp o.s.v.). nino> jeg sagde godt nok at det blev langhåret. det sidste her er rimelig akademisk og du behøver ikke tage megen hensyn til det.
Jeg mener bare at custom ActiveX komponenter ikke er lokale, altså skal de hentes fra sitet, som man forsøger at loade. Spørgsmålet er så bare om din løsning er lidt overkill, når det bare drejer sig om at få hentet noget data via http, netop plain text. <iframe name="test" src="about:blank" style="visibility: hidden"> <script> function reload() { test.src = "dinurl.asp"; setTimeout(reload, 15000); } reload(); </script>
så har du den samme information som din metode klare, uden specielle sikkerheds spørgsmål... Bare en tanke.
jamen det er rigtigt. ActiveX komponenter er ALTID lokale og ALDRIG en del af browseren (p.t.) .. An interesting thing to note is that because an ActiveX object is compiled code on the client machine (Note: not the client Web browser) .. iframe er en mulighed, men det virker som om det ikke er på tale.
Jeg mener bare at det er tit at man skal download og instl. et ActiveX komponent, når dette benyttes på siden. Jeg ved ikke om det er et citat du har pastet ind, hertil kan jeg kun sige JA. det er kompileret kode man hanter ned fra nettet og instl. på sin MASKINE ikke som en del af browseren, netop derfor hat mange brugt ordet plug-in om AcitveX objecter. Og hvornår var det lige at iframe løsningen blev forkastet.
Det er da ikke noget problem at opdatere en dropdown via javascript. Man kan forestille sig at iframen loader et script der opdatere iframens.parent dropdown....
hmmmm. OK nu kommer der lige en lidt længere smører :
Man kan lave en iframe sådan : <iframe name="test" src="about:blank" style="visibility: hidden"> Den kan ikke ses på skærmen pga. sin style. Man har feks. en dropdown : <select id="minselect"> <option>hej hej </select> Man laver så et script sådan : <script> function reload() { test.src = "dinurl.asp"; setTimeout(reload, 15000); } reload(); </script> Der søger for at reloade siden hvert 15 sekund. Så langt er du med.... dinurl.asp har så f.eks. følge kode :
<script> newOpt = document.createElement("OPTION"); newOpt.value = 'et eller andet' newOpt.text = <% Reposnse.write('dette er en test') %>; parent.minselect.add(newOpt,1); </script>
Det skulle virke hvis altså at frame hirakiet er som jeg antog....!
der er et par hakker i koden men jeg ser klart ideen. ANYHOW, så er jeg RIMELIG sikker på at det ActiveX objekt der skal anvendes er en delmængde af browser pakken. Vi kan jo lave en test, hvis du ikke har downloaded komponenten skulle du ikke kunne se følgende side http://www.mycgiserver.com/~maddog/test.html
Yeps det virker, men sådan er det jo med microsoft, de vedlægger en hulens masse ActiveX objecter der'shippes' med når du instl. IE. De installeres ikke i browseren men på maskinen. ' So to say.. '. Og OK hakker er der nok, men det virker uden diverse krumspring. BTW. så er det den foretrukne ide til at lave eksempelvis chats.
kasseper: der er sandt. men som sagt har NS en anden komponent der virker aldeles bravo. Hvor er det den download kommer fra? Opera brugere? Med hakker mener jeg at koden ikke ser ud til at virke i NS. Jeg mener ikke man bare kan skrive parent.minselect da det ikke er en korrekt indexering, men jeg kan tage fejl.
ok. jeg læser lige mine sidste posts og erkender jeg lyder en anelse brysk. Det er jeg ikke. Sværger. Men jeg kan ikke lide en ide bliver forkastet på forkert grundlag. jeg synes faktisk godt om idéen med en off-screen iframe, hvis det kan opfylde kravet.
der skal lige en lille ændring ind refresh.start = function() { window.clearTimeout(timer); document.getElementById('dinTR').innerHTML = readFile('dinurl.asp'); timer = window.setTimeout(refresh.start, 15000); //15 ms }
ellers kan du komme til at starte flere på en gang. refresh factory'en kan sagtens udbygges til flere funktioner hvis du vil.
=maddog= > Mht. ActiveX objecter, så kender jeg ikke listen over objecter der medfølger i en browser instl. Men under normale omstændigheder er det jo sådan et indeholder en side en ActiveX skal brugeren verificere downloadet af objectet pga. sikkerhedsmæssige hensyn. Mht. hakkerne, så var det bre for at ridse ideen op, når man laver x-browser løsninger har man jo typsik flere sektioner kode til diverse browsere.... nino > bare 'for the record' så er det jo bare et eksempel, med det asp kode, det har maddog jo også idet han referere til dinurl.asp.... nok om det go fornøjelse
er der en måde man kan få den til at opdatere den drop når filen viser f.eks. <option>Haha</option> <option>Huhu</option> <option>Hihi</option> ? det står på en linie med det jeg har prøvet
Ok, ikke for at være en lyseslukker men det er en problemfyldt løsning du har valgt, sikkerhedsmæssigt er der et brist i Microsoft.XMLHTTP, og der kan være mange der har oplevet at det ikke virker i deres browser på trods af at det er IE. Læs f.eks. :
hvordan vil du gerne have den opdateret. sådan som koden er p.t. kan du opdatere netop et html element. dette skal have id="dinTR". <option id="dinTR">Haha</option> du kan kun have et objekt med den id. Hvis du vil have andre skal enten generere html (altså nye options) og sætte id på <select> eller tilføje flere i refresh.start document.getElementById('dinTR').innerHTML = readFile('dinurl.asp'); document.getElementById('huttelihut').innerHTML = readFile('dinurl.asp'); document.getElementById('bummelum').innerHTML = readFile('dinurl.asp'); .....
kasseper> man kan ikke lave en kæft hvis man skulle tage højde for alle de huller der er i MS kode, men jeg bruger jo heller ikke MSXML.XmlHttp som er problemet i MS02-008 secbul. Det er rigtigt at det ikke virker i Linux, men de bruger alle sammen NS/Moz.
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.