/ Forside / Teknologi / Udvikling / Java Scripts / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java Scripts
#NavnPoint
molokyle 5410
Klaudi 2799
smorch 2439
kim 1360
Harlekin 1134
bentjuul 984
gibson 800
severino 695
Random 675
10  konsulent.. 626
Afvikle javascript efter ajax load
Fra : Anders M


Dato : 07-12-09 21:03

Hej,

Jeg har lavet en ajax funktion, som henter indhold fra en php fil
ind til min side. Jeg bruger responseText til at skrive
indholdet. Det virker fint, og indholdet bliver hentet, men
hvordan kan jeg afvikle javascript fra den side jeg henter
indholdet fra?

Mvh Anders

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

 
 
Birger Sørensen (07-12-2009)
Kommentar
Fra : Birger Sørensen


Dato : 07-12-09 21:20

Anders M tastede følgende:
> Hej,
>
> Jeg har lavet en ajax funktion, som henter indhold fra en php fil
> ind til min side. Jeg bruger responseText til at skrive
> indholdet. Det virker fint, og indholdet bliver hentet, men
> hvordan kan jeg afvikle javascript fra den side jeg henter
> indholdet fra?
>
> Mvh Anders

Ved at includere det i callback funktionen.
Eller at skrive det du vil have udført som funktioner, og kalde disse i
callback funktionen.
innerHTML afvikler ikke indlejret js.

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk



Anders M (07-12-2009)
Kommentar
Fra : Anders M


Dato : 07-12-09 21:36

Birger Sørensen wrote in dk.edb.internet.webdesign.clientside:
> Anders M tastede følgende:
> > Hej,
> >
> > Jeg har lavet en ajax funktion, som henter indhold fra en php fil
> > ind til min side. Jeg bruger responseText til at skrive
> > indholdet. Det virker fint, og indholdet bliver hentet, men
> > hvordan kan jeg afvikle javascript fra den side jeg henter
> > indholdet fra?
> >
> > Mvh Anders
>
> Ved at includere det i callback funktionen.
> Eller at skrive det du vil have udført som funktioner, og kalde disse i
> callback funktionen.
> innerHTML afvikler ikke indlejret js.
>
> Birger
>

Kan det ikke på en eller anden måde lade sig gøre at loade javascripts vha
ajax?

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Birger Sørensen (07-12-2009)
Kommentar
Fra : Birger Sørensen


Dato : 07-12-09 22:02

Anders M kom med denne ide:
> Birger Sørensen wrote in dk.edb.internet.webdesign.clientside:
>> Anders M tastede følgende:
>>> Hej,
>>>
>>> Jeg har lavet en ajax funktion, som henter indhold fra en php fil
>>> ind til min side. Jeg bruger responseText til at skrive
>>> indholdet. Det virker fint, og indholdet bliver hentet, men
>>> hvordan kan jeg afvikle javascript fra den side jeg henter
>>> indholdet fra?
>>>
>>> Mvh Anders
>>
>> Ved at includere det i callback funktionen.
>> Eller at skrive det du vil have udført som funktioner, og kalde disse i
>> callback funktionen.
>> innerHTML afvikler ikke indlejret js.
>>
>> Birger
>>
>
> Kan det ikke på en eller anden måde lade sig gøre at loade javascripts vha
> ajax?

Hvad mener du med loade?
ajax kører i js, og i callback funktionen, kan du gøre lige hvad du
vil.
Hvis du includerer js i den tekst der hentes, kan du ikke umiddelbart
få den udført, og det må være det du sigter efter.

Det eneste jeg umiddelbart kan komme i tanke om, er at lægge det som
<script ...>
function KaldMig() { ... }
</script>
i den tekst der returneres af AJAX kaldet. Den skal så indsættes med
innerHTML - og der vil formentlig være problemer med, at det element
der indsættes i, skal have tid til at parse indholdet, før KaldMig()
kan kaldes.
(Hvis det overhovedet virker - har ikke prøvet).

Et alternativ kunne være at lade AJAX-kaldet returnere en tekst, der
indholder js'en separat, parse denne tekst i js og html dele, indsætte
html hvor den skal bruges, og bruge eval() på js delen. Alt sammen i
callback funktionen.
(Og det har jeg heller ikke prøvet - og jeg bruger aldrig selv eval().)

Endelig er der en mulighed i at skrive din js i funktioner der hentes
til dokumentet (altså ikke af AJAX), og kaldes i callback funktionen.
Lidt spild, da det ikke er givet, at de vil blive brugt. Og det kan
også tænkes, at din AJAX faktisk henter værdier der skal bruges, og det
vil så ikke kunne lade sig gøre - ikke bare lige, i hvert fald.

Måske du kunne specificere, hvad det er du vil have js til at gøre
efter AJAX kaldet?

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk



Anders M (07-12-2009)
Kommentar
Fra : Anders M


Dato : 07-12-09 22:07

Birger Sørensen wrote in dk.edb.internet.webdesign.clientside:
> Anders M kom med denne ide:
> > Birger Sørensen wrote in dk.edb.internet.webdesign.clientside:
> >> Anders M tastede følgende:
> >>> Hej,
> >>>
> >>> Jeg har lavet en ajax funktion, som henter indhold fra en php fil
> >>> ind til min side. Jeg bruger responseText til at skrive
> >>> indholdet. Det virker fint, og indholdet bliver hentet, men
> >>> hvordan kan jeg afvikle javascript fra den side jeg henter
> >>> indholdet fra?
> >>>
> >>> Mvh Anders
> >>
> >> Ved at includere det i callback funktionen.
> >> Eller at skrive det du vil have udført som funktioner, og kalde disse i
> >> callback funktionen.
> >> innerHTML afvikler ikke indlejret js.
> >>
> >> Birger
> >>
> >
> > Kan det ikke på en eller anden måde lade sig gøre at loade javascripts vha
> > ajax?
>
> Hvad mener du med loade?
> ajax kører i js, og i callback funktionen, kan du gøre lige hvad du
> vil.
> Hvis du includerer js i den tekst der hentes, kan du ikke umiddelbart
> få den udført, og det må være det du sigter efter.
>
> Det eneste jeg umiddelbart kan komme i tanke om, er at lægge det som
> <script ...>
> function KaldMig() { ... }
> </script>
> i den tekst der returneres af AJAX kaldet. Den skal så indsættes med
> innerHTML - og der vil formentlig være problemer med, at det element
> der indsættes i, skal have tid til at parse indholdet, før KaldMig()
> kan kaldes.
> (Hvis det overhovedet virker - har ikke prøvet).
>
> Et alternativ kunne være at lade AJAX-kaldet returnere en tekst, der
> indholder js'en separat, parse denne tekst i js og html dele, indsætte
> html hvor den skal bruges, og bruge eval() på js delen. Alt sammen i
> callback funktionen.
> (Og det har jeg heller ikke prøvet - og jeg bruger aldrig selv eval().)
>
> Endelig er der en mulighed i at skrive din js i funktioner der hentes
> til dokumentet (altså ikke af AJAX), og kaldes i callback funktionen.
> Lidt spild, da det ikke er givet, at de vil blive brugt. Og det kan
> også tænkes, at din AJAX faktisk henter værdier der skal bruges, og det
> vil så ikke kunne lade sig gøre - ikke bare lige, i hvert fald.
>
> Måske du kunne specificere, hvad det er du vil have js til at gøre
> efter AJAX kaldet?
>
> Birger
>
> --
> http://varmeretter.dk - billig, sund og hurtig mad
> http://bbsorensen.dk

Jeg skal hente en TinyMCE editor i en ajax funktion.. dvs. at det skal køres
NÅR ajax funktion er færdig.

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Stig Johansen (08-12-2009)
Kommentar
Fra : Stig Johansen


Dato : 08-12-09 04:45

"Anders M" <asdsda@dsasad.com> wrote in message
news:4b1d6e77$0$281$14726298@news.sunsite.dk...
>
> Jeg skal hente en TinyMCE editor i en ajax funktion.. dvs. at det skal
køres
> NÅR ajax funktion er færdig.

Jeg har det lidt ligesom Birger, med jeg ikke rigtig forstår hvor du vil
hen.
TinyMCE er jo bare noget javascript, der bygger en redigerbar iframe ud fra
et textarea.

Den ligger vel som <script src=".. osv i din head sektion ?

TinyMCE kan du formentlig 'aktivere' i din callback funktion.

Det er jo her du *ved* at ajaxfunktionen er færdig (og ok).

--
Med venlig hilsen/Best regards
Stig Johansen




Anders M (08-12-2009)
Kommentar
Fra : Anders M


Dato : 08-12-09 16:26

Stig Johansen wrote in dk.edb.internet.webdesign.clientside:
> "Anders M" <asdsda@dsasad.com> wrote in message
> news:4b1d6e77$0$281$14726298@news.sunsite.dk...
> >
> > Jeg skal hente en TinyMCE editor i en ajax funktion.. dvs. at det skal
> køres
> > NÅR ajax funktion er færdig.
>
> Jeg har det lidt ligesom Birger, med jeg ikke rigtig forstår hvor du vil
> hen.
> TinyMCE er jo bare noget javascript, der bygger en redigerbar iframe ud fra
> et textarea.
>
> Den ligger vel som <script src=".. osv i din head sektion ?
>
> TinyMCE kan du formentlig 'aktivere' i din callback funktion.
>
> Det er jo her du *ved* at ajaxfunktionen er færdig (og ok).
>
> --
> Med venlig hilsen/Best regards
> Stig Johansen

Jeg har fundet ud af det nu, men der er opstået et underligt problem. FF
plejer altid at køre "alt" uden brok, men det modsatte viste sig i dag, da jeg
lavede dette:

var xmlhttp;

function loadfile(filename, filetype)
{
   switch(filetype)
   {
      case "js":
         var file = document.createElement('script')
         file.setAttribute("type","text/javascript")
         file.setAttribute("src", filename)
         break;
      case "css":
         var file=document.createElement("link")
         file.setAttribute("rel", "stylesheet")
         file.setAttribute("href", filename)
         file.setAttribute("type", "text/css")      
         break;
   
         
   }
   if (typeof file!="undefined")
      document.getElementsByTagName("head")[0].appendChild(file)
}

function dialog(url)
{
   xmlhttp   = GetXmlHttpObject();
   if (xmlhttp==null)
   {
      alert ("Browser does not support HTTP Request");
      return;
   }
   
   var url = url;
   url = url+"&sid=" + Math.random();
   
   xmlhttp.onreadystatechange = function() {
    // only if req shows "loaded"
    if (xmlhttp.readyState == 4) {
    // only if "OK"
    if (xmlhttp.status == 200)
    {
       var browser = navigator.appName;
            if (browser=="Microsoft Internet Explorer")
            {
               document.getElementById("body").className = "shadow";
               document.getElementById("top").className = "shadow";
               document.getElementById("bottom").className = "shadow";
               document.getElementById("menu").className = "shadow";
            }
            
            else
            {
               document.getElementById("agmweb_cms").className = "shadow";
            }
      
            document.getElementById("dialog").innerHTML = xmlhttp.responseText;
    }
    else
    {
    dialog("/admin/dialogs/error.php?error="+xmlhttp.statusText);
    }
    }
   }
   xmlhttp.open("GET",url,true);
   xmlhttp.send(null);
}


function dialog_tinymce(url)
{
   xmlhttp   = GetXmlHttpObject();
   if (xmlhttp==null)
   {
      alert ("Browser does not support HTTP Request");
      return;
   }
   
   var url = url;
   url = url+"&sid=" + Math.random();
   
   xmlhttp.onreadystatechange = function() {
    // only if req shows "loaded"
    if (xmlhttp.readyState == 4) {
    // only if "OK"
    if (xmlhttp.status == 200)
    {       
       var browser = navigator.appName;
            if (browser=="Microsoft Internet Explorer")
            {
               document.getElementById("body").className = "shadow";
               document.getElementById("top").className = "shadow";
               document.getElementById("bottom").className = "shadow";
               document.getElementById("menu").className = "shadow";
            }
            
            else
            {
               document.getElementById("agmweb_cms").className = "shadow";
            }
      
            document.getElementById("dialog").innerHTML = xmlhttp.responseText;
            
            loadfile("/admin/plugins/tinymce/jscripts/tiny_mce/tiny_mce.js", "js")
//dynamically load and add this .js file

            tinyMCE.init({
          // General options
          mode : "textareas",
          theme : "advanced",
          plugins :
"safari,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespe
ll,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,p
aste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,
template,wordcount",
          relative_urls : false,
          // Theme options
          theme_advanced_buttons1 :
"save,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justif
yright,justifyfull,styleselect,formatselect,fontselect,fontsizeselect",
          theme_advanced_buttons2 :
"cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outde
nt,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code,
|,insertdate,inserttime,preview,|,forecolor,backcolor",
          theme_advanced_buttons3 :
"tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespel
l,media,advhr,|,print,|,ltr,rtl,|,fullscreen",
          theme_advanced_buttons4 :
"insertlayer,moveforward,movebackward,absolute,cite,abbr,acronym,del,ins,attri
bs,|,visualchars,nonbreaking,pagebreak",
          theme_advanced_toolbar_location : "top",
          theme_advanced_toolbar_align : "left",
          theme_advanced_statusbar_location : "bottom",
          theme_advanced_resizing : true,
   
          // Example content CSS (should be your site CSS)
          content_css : "",
   
          // Drop lists for link/image/media/template dialogs
          external_link_list_url : "/admin/plugins/tinymce/list/links.php",
          
          file_browser_callback : "myFileBrowser"
          
       });
    }
    else
    {
    dialog("/admin/dialogs/error.php?error="+xmlhttp.statusText);
    }
    }
   }
   xmlhttp.open("GET",url,true);
   xmlhttp.send(null);
}



function close_dialog()
{
   
   var browser=navigator.appName;
   if (browser=="Microsoft Internet Explorer")
   {
      document.getElementById("body").className = "";
      document.getElementById("top").className = "";
      document.getElementById("bottom").className = "";
      document.getElementById("menu").className = "";
   }
   else
   {
      document.getElementById("agmweb_cms").className = "";
   }
   
   document.getElementById("dialog").innerHTML = "";

}


Internet Explorer viser dialogen fint, og henter TinyMCE ved dialog_tinymce,
men det virker ikke i FF.. hvordan kan det være? Er det noget med at den kører
i layers?

Mvh Anders

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Birger Sørensen (09-12-2009)
Kommentar
Fra : Birger Sørensen


Dato : 09-12-09 23:51

Anders M kom med denne ide:
8X
>
> Internet Explorer viser dialogen fint, og henter TinyMCE ved dialog_tinymce,
> men det virker ikke i FF.. hvordan kan det være? Er det noget med at den
> kører i layers?
>
> Mvh Anders

En årsag kunne være, at open() skal være det første kald til
XMLHTTPRequest objectet. Det skulle det i hvert fald oprindeligt, og
eftersom standarden kun er draft, kan man ikke regne med at den er
implementeret.
Du kalder først open() umiddelbart før send(), og det kan være årsag
til at alle andre variable i objectet bliver resat til default værdier,
og objectet derfor ikke gør som du forventer.

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk



Stig Johansen (10-12-2009)
Kommentar
Fra : Stig Johansen


Dato : 10-12-09 03:29

Birger Sørensen wrote:

> En årsag kunne være, at open() skal være det første kald til
> XMLHTTPRequest objectet. Det skulle det i hvert fald oprindeligt, og
> eftersom standarden kun er draft, kan man ikke regne med at den er
> implementeret.

Det er vist ikke så lang tid siden vi snakkede om det, og dengang testede
jeg det igen.

Jeg kan stadig ikke huske hvilke browsere, der gør hvad, men det er helt
sikkert, at visse browsere resetter onreadystate ved open.

@Anders
Du har en masse redundant kode, som du også bruger i dine closures.

Lav din close_dialog om til at modtage en parameter ("" eller "shadow" ) og
brug den i stedet.

Visse browsere kan sættes op til at identificere sig som IE, herunder min
Konqueror, så den med appname er ikke så smart.

Brug i stedet if (document.all)

Og den der:
        url = url+"&sid=" + Math.random();
er nok noget du har lavet fordi du glemmet at tjekke på 'not modified'.
Det er ikke nok, kun at teste på status == 200.

--
Med venlig hilsen
Stig Johansen

Anders M (10-12-2009)
Kommentar
Fra : Anders M


Dato : 10-12-09 21:53

> @Anders
> Du har en masse redundant kode, som du også bruger i dine closures.

Overflødig kode? Hvor?

> Lav din close_dialog om til at modtage en parameter ("" eller "shadow" )
og
> brug den i stedet.

> Visse browsere kan sættes op til at identificere sig som IE, herunder min
> Konqueror, så den med appname er ikke så smart.
>
> Brug i stedet if (document.all)

Tak :)
> Og den der:
>         url = url+"&sid=" + Math.random();
> er nok noget du har lavet fordi du glemmet at tjekke på 'not modified'.
> Det er ikke nok, kun at teste på status == 200.

Hvad vil du mere teste?

> --
> Med venlig hilsen
> Stig Johansen


Mvh Anders

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Stig Johansen (10-12-2009)
Kommentar
Fra : Stig Johansen


Dato : 10-12-09 22:56

"Anders M" <sad@asdsda.com> wrote in message
news:4b215fa8$0$270$14726298@news.sunsite.dk...
> > Det er ikke nok, kun at teste på status == 200.
>
> Hvad vil du mere teste?

Jeg tester på 200,100 samt 304.

--
Med venlig hilsen/Best regards
Stig Johansen




Søg
Reklame
Statistik
Spørgsmål : 177427
Tips : 31962
Nyheder : 719565
Indlæg : 6407932
Brugere : 218877

Månedens bedste
Årets bedste
Sidste års bedste