Avatar billede thomas_b Nybegynder
07. oktober 2008 - 21:50 Der er 10 kommentarer

Javascript ikke "aktivt" når det hentes via AJAX

Hej...

Jeg har et javascript som ikke bliver kørt når jeg henter data via AJAX...

Kan dette afvikles på en måde...

Det kunne evt. se således ud...:

<script>
function aaben(id){
  layerid=document.getElementById(id);
  if(layerid.style.display=="none"){layerid.style.display="block";
  if(window.attachEvent)dohIE_png(layerid); // kun problem i IE
  }
}

function luk(id){
  layerid = document.getElementById(id);
  if(layerid.style.display=="block"){
  layerid.style.display="none";
  }
}
</script>


<img src="22838.jpg" border="0" height="144" style="border:1px solid #c0c0c0;" onmouseover="aaben('pic1');" onmouseout="luk('pic1');"><br>
<img src="22838.jpg" border="0" height="144" style="border:1px solid #c0c0c0;" onmouseover="aaben('pic2');" onmouseout="luk('pic2');"><br>
<img src="22838.jpg" border="0" height="144" style="border:1px solid #c0c0c0;" onmouseover="aaben('pic3');" onmouseout="luk('pic3');"><br>



<div id="pic1" style="position:absolute;top:0px;left:0px;z-index:1;display:none;"><img src="22839.jpg" border="0" height="445" style="border:1px solid #c0c0c0;"></div>
<div id="pic2" style="position:absolute;top:0px;left:0px;z-index:1;display:none;"><img src="22840.jpg" border="0" height="445" style="border:1px solid #c0c0c0;"></div>
<div id="pic3" style="position:absolute;top:0px;left:0px;z-index:1;display:none;"><img src="22841.jpg" border="0" height="445" style="border:1px solid #c0c0c0;"></div>
Avatar billede olebole Juniormester
07. oktober 2008 - 22:00 #1
<ole>

Der er ikke noget Ajax i dén kode. Hvordan se koden ud, du spørger om?  =)

/mvh
</bole>
Avatar billede olebole Juniormester
07. oktober 2008 - 22:04 #2
Du har vel ikke gang i noget innerHTML-slam? Koden ovenfor er vel ikke en kode, du forsøger at indsætte via såkaldt 'Ajax'?

Man henter ikke HTML, når man bruger Ajax. Man henter data i XML- eller JSON-format, som formateres og indsættes med DOM på klienten  ;o)
Avatar billede thomas_b Nybegynder
07. oktober 2008 - 22:26 #3
Dette er den kode der fremkalder den overstående kode.... :)


<script>
var xmlHttp

function site(str)
{
if (str.length==0)
  {
  document.getElementById("indexsite").innerHTML="";
  return;
  }
xmlHttp=GetXmlHttpObject();
if (xmlHttp==null)
  {
  alert ("Your browser does not support AJAX!");
  return;
  }
var url="get_kat.asp";
url=url+"?"+str;
xmlHttp.onreadystatechange=stateChanged;
xmlHttp.open("GET",url,true);
xmlHttp.send(null);
}

function stateChanged()
{
if (xmlHttp.readyState==4)
{
document.getElementById("indexsite").innerHTML=xmlHttp.responseText;
}
}

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>
Avatar billede olebole Juniormester
07. oktober 2008 - 22:45 #4
Som sagt er det en misforståelse at sende HTML retur til klienten - ligesom det er uhensigtsmæssigt at bruge innerHTML (som ovenikøbet aldrig har været valid i nogen standard - og formodentlig heller ikke bliver det) - og ikke mindst er det en tussegammel XMLHttpRequest-qrapper, du har kørende.

Endelig henter man ikke JavaScript på den måde - men i JS-filer.

Prøv at kikke på disse to artikler:
    http://www.dengodekode.dk/artikler/ajax/xmlhttprequest_wrapper.php
    http://www.dengodekode.dk/artikler/DOM/no_innerhtml.php

- samt kik på eksemplerne i denne tråd:
    http://www.eksperten.dk/spm/817625
Avatar billede thomas_b Nybegynder
08. oktober 2008 - 03:31 #5
Jeg er ikke så godt kørende i specielt Javascript men har fundet dette script i tråden...

Men det virker ikke helt efter hensigten...!
Den fjerner simpelthen et billede når jeg trykker på en site('cms=3');
Fjerner kun et billede inetet andet, ingen tekst kommer eller lign...!
Opdatere den hele siden eller kun feltet: <div id="indexsite">&nbsp;</div> ??


<script type="text/JavaScript">
function AjaxReq(sMethod, sUrl, oVars, fnCallBack) {
    var oHttp = new XMLHttpRequest();
    oHttp.open(sMethod, sUrl, true);
    oHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=utf-8");
    oHttp.onreadystatechange = _fnCallBack;
    var aQuery = [];
    for (var x in oVars) aQuery.push( encodeURIComponent(x) + "=" + encodeURIComponent(oVars[x]) );
    oHttp.send( aQuery.join("&") );
    aQuery = null;

    function _fnCallBack() {
        if (oHttp.readyState<4) return;
        fnCallBack(oHttp);
        oHttp = null;
    }
    return this;
}

function myCallBack(oHttp) {
    document.getElementById("indexsite").firstChild.nodeValue = oHttp.responseText;
}

function site(str) {
    new AjaxReq("POST", "get_kat.asp?"+str, null, myCallBack);
}
</script>
Avatar billede olebole Juniormester
08. oktober 2008 - 11:15 #6
Kun feltet 'indexsite' - men _kun_ med en stump tekst. Sådan kan du ikke sætte HTML-elementer ind. De sættes ind med DOM ... men det er ikke så let, hvis du ikke er temmelig god til at kode frontend. Ajax kan ikke anbefales, med mindre man er ret god til at scripte  =)
Avatar billede thomas_b Nybegynder
08. oktober 2008 - 15:51 #7
Så ville aligevel anbefale det allerførste script til mig, nu jeg ikke er den store guru til JS ?
Avatar billede olebole Juniormester
08. oktober 2008 - 17:32 #8
Nej, egentlig ikke. Jeg hører jo til de der gamle, kedelige mænd, som mener, man bør kunne det man gør - og at hvis man vil kunne mere, så må lære det, man gerne vil kunne. Det er én af årsagerne til, man så sjældent ser mig deltage i synkronsvømme konkurrencer  ;o)
Avatar billede roenving Novice
08. oktober 2008 - 23:38 #9
Hrm, der kunne du måske få en ambition, der kunne bringe dig videre, ole ,-)
Avatar billede olebole Juniormester
09. oktober 2008 - 01:49 #10
Måske, vi skulle overveje synkronkast til næste DM i Hardwarekast? Jeg forestiller mig dig som fristende sprød i en stram Speedo - og en fladskærm i dobbelt baghåndsgreb!  *LoL*  ;D
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