Probleme mit JavaScript

Peer-Mario

B1G-Software-Kunde
#1
Hallo,

ich habe ein Problem mit einem JS/Ajax Script. Vorweg, das Script an sich funktioniert.

Ich möchte dieses Script ausführen, wenn die Seite geladen wird. Momentan ist es so, dass man einen Button klicken muss um es zu aktivieren.

Allerdings verwende ich ein CMS und ich möchte, dass das Script nur bei einer einzigen Seite innerhalb dieses CMS ausgeführt wird und nicht gloabl bei jeder Seite.

Hier mal meine PHP-Datei (ajaxdemo.php):
PHP:
<?php
   require_once("../../class2.php");
   require_once(HEADERF);   

   if (file_exists(e_PLUGIN."e107helpers/e107Helper.php")) {
      include(e_PLUGIN."e107helpers/e107Helper.php");
   } else {
      print "Fatal error, cannot find e107Helper class";
   }

   $title = "e107 Helper Project - Ajax demo"; 
   // Populating an area of the page with HTML from the Ajax request

   $text .= "<div class='forumheader2'>";
   $text .= "<div id='mydiv'>Populating an area of the page via an Ajax request...</div>
      <input type='button' onclick='ajaxdemo.populatepage();' value='Re-populate'>
      ";
   $text .= "</div>";

// mit der folgenden zeile habe ich gedacht, ich kann die funktion aufrufen nach dem rendern der Seite, geht aber auch nicht, ich muss immer noch klicken

   $text .="<script type=\"text/javascript\">ajaxdemo.populatepage();</script>";

   $ns->tablerender($title, $text);
   $footer_js[] = 'ajaxdemo.js';
   require_once(FOOTERF); 
?>
Es gibt noch zwei weitere Dateien - ajaxdemo.js und ajaxdemo_handler.php die im selben Verzeichnis wie Ajaxdemo.php liegen.

Wie bekomme ich jetzt ajaxdemo.populatepage(); geladen beim Start dieser Seite.

Zu sehen das ganze HIER

Gruß Peer-Mario
 

UNC

B1G-Software-Kunde
#4
Irgendwo fehlt angeblich ein ";" (IE 6)
Code:
<script type="text/javascript">
function radio()
{
  ajaxdemo.populatepage()
}
</script>
Vielleicht hier?
 

Peer-Mario

B1G-Software-Kunde
#5
Irgendwo fehlt angeblich ein ";" (IE 6)
Code:
<script type="text/javascript">
function radio()
{
  ajaxdemo.populatepage()
}
</script>
Vielleicht hier?
Huch, ähmmm.. nein nein, das ist im Theme definiert, das geht auch ohne diese Funktion im Theme. Ich hatte versucht, das Script schon Header bekannt zu geben, aber das muss auch anders gehen.

Gruß Peer-Mario
 

modig

B1G-Software-Kunde
#6
Huhu,
wieso hast Du 2 <body>'s in der Seite (Zeilen 20 und 284)? "The element named above was found in a context where it is not allowed." sagt der W3C-Validator dazu.

Wäre ich Browser würde ich das "onload="ajaxdemo.populatepage();"" im 2. Body-Tag nicht ausführen. Ob ich das, wenn's im ersten eingebunden wäre tun würde, müsste ich mir noch überlegen :D.

Könntest ja vielleicht eine 'standalone'-Demo erstellen - also ohne e107 drumherum. 442 Codezeilen sind mir direkt nach dem Essen zu viel ;).

Karsten
 

Peer-Mario

B1G-Software-Kunde
#7
Huhu,
wieso hast Du 2 <body>'s in der Seite (Zeilen 20 und 284)? "The element named above was found in a context where it is not allowed." sagt der W3C-Validator dazu.
Karsten
Das zweite Body ist raus. (ist/war ein Überbleibsel vom Test, deswegen ist es ja eine Testseite :) )

Könntest ja vielleicht eine 'standalone'-Demo erstellen - also ohne e107 drumherum. 442 Codezeilen sind mir direkt nach dem Essen zu viel ;).
Karsten
Das allerdings kann ich nicht machen :( aufgrund der Ajaxfunktionen, die direkt mit dem e107 verknüpft sind.

Dann würde es mit Sicherheit auch im bodytag mit onload funktionieren.
Ich möchte dieses Script allerdings nur im div-tag automatisch gestartet haben, der im obigen php-code zu sehen ist.

Gruß Peer-Mario
 

modig

B1G-Software-Kunde
#8
Huhu,
Ahaaaa.
Du möchtest also ein Javascript ausführen wenn die Seite geladen ist, hast aber nur 'Zugriff' auf einen Teil des HTML-Quelltextes und nicht auf den BODY-Tag. Das hat also eigentlich mit AJAX gar nix zu tun, oder?

Hab ich das so richtig verstanden?

Karsten
 

Peer-Mario

B1G-Software-Kunde
#9
Huhu,
Ahaaaa.
Du möchtest also ein Javascript ausführen wenn die Seite geladen ist, hast aber nur 'Zugriff' auf einen Teil des HTML-Quelltextes und nicht auf den BODY-Tag. Das hat also eigentlich mit AJAX gar nix zu tun, oder?

Hab ich das so richtig verstanden?

Karsten
Richtig, genau so ist es. Und da das Ganze als späteres Plugin laufen soll kann ich dann niemanden zumuten noch Änderungen an Templates und Themes vorzunehmen :)

Gruß Peer-Mario
 

modig

B1G-Software-Kunde
#10
Huhu,
was hast Du gegen:
Code:
<script language="JavaScript">ajaxdemo.populatepage();</script>
an passender Stelle im HTML-Code?

Lästige PopUps via
Code:
<script language="JavaScript">window.open('http://www.google.de',"","status=yes,scrollbars=yes,width=500,height=420,")</script>
platziert an beliebiger Stelle innerhalb des Bodys, funktionieren ja (abgesehen von Browsern mit PopUpblockern) leider auch.

Karsten
 

Peer-Mario

B1G-Software-Kunde
#11
Huhu,
was hast Du gegen:
Code:
<script language="JavaScript">ajaxdemo.populatepage();</script>
an passender Stelle im HTML-Code?
Hallo Karsten,

den Aufruf hatte ich schon im Script (siehe mein erstes Posting) und führte nicht zum gewünschten Erfolg.

Gruß Peer-Mario

Allerdings sagt mit die Fehlerconsole auch, ajaxdemo sei nicht definiert. Wo muss ich das denn noch definieren?
 
Last edited:

modig

B1G-Software-Kunde
#12
Huhu,
ich sags ja: Wer lesen kann, ist klar im Vorteil.
...direkt nach dem Essen zu viel ;).
:D

Fakt ist, der Punkt ...emo.popula... stört. Ich nehme mal an, dass der Aufruf der Funktion radio() genauso nicht funktioniert - oder?

Versuche doch mal, die Funktion populate() in eine eigene Datei auszulagern und dann direkt aufzurufen.

Viel mehr fällt mir im Moment nicht ein dazu.

Karsten

//Edit:
Oder auch andersrum: Den Inhalt der 'ajaxdemo.js' zum testen mal mit in die HTML-Seite packen.
 
Last edited:

Peer-Mario

B1G-Software-Kunde
#13
//Edit:
Oder auch andersrum: Den Inhalt der 'ajaxtest.js' zum testen mal mit in die HTML-Seite packen.
Wenn Du mir jetzt noch sagst, wie ich den Inhalt der js in die obige php-Datei schreibe, kann ich das gerne ausprobieren :)

In der JS steht sowas wie..

var ajaxdemo = {
populatepage : function () {
e107HelperAjax.addParm('rand', Math.random());
this.sendRequest('update');

} ,

und noch ein paar funktionen.

Gruß Peer-Mario

PS: Ich fange mit JS gerade erst an... *schäm*
 

modig

B1G-Software-Kunde
#14
Huhu,
ich glaube mal, das muss irgendwo zwischen <HEAD> und </HEAD>, also in die 'header_default.php'.

Code:
<script type="text/javascript">
<!--
var ajaxdemo = {
   populatepage : function () {
   var mythis = 0;
   while (mythis != 10) {
      e107HelperAjax.addParm('rand',   Math.random());
      this.sendRequest('update');
      mythis = mythis + 1;
      }
   },

   popups : function () {
      e107Helper.message('ajaxdemomessage', 'Please wait...');
      e107HelperAjax.addParm('messageid', 'ajaxdemomessage');
      this.sendRequest('popups');
   },

   alert : function () {
      this.sendRequest('alert');
   },

   sendRequest : function (action) {
      e107HelperAjax.addParm('action', action);          
      e107HelperAjax.post('ajaxdemo_handler.php');
   }
}// -->
</script>
Karsten
 

Peer-Mario

B1G-Software-Kunde
#15
Das ist eine ganz dumme Idee,

denn wenn ich das im HEAD Tag mache, wird das Script beim Aufruf sofort gestartet. Das Problem daran ist, dass die Seite dann nicht mehr gerendert und somit auch nicht dargstellt wird.

Gruß Peer-Mario

Habe ich gerade ausprobiert :)

So, nun habe ich das hin.
Ich habe das in die ajaxdemo.php geschrieben direkt hinter title :)
 
Last edited:

modig

B1G-Software-Kunde
#16
...wenn ich das im HEAD Tag mache, wird das Script beim Aufruf sofort gestartet.
Nö, was soll daran denn zu starten sein? Da werden ja lediglich 4 Funktionen definiert. Wenn ich das bei mir hier einfüge, passiert gar nix.

Das einzige, was passieren wird ist, dass '<script language="JavaScript">ajaxdemo.populatepage();</script>' ausgeführt wird. Also mal rausnehmen. Das Einfügen an sich muss völlig ohne Folgen sein.

Kann das leider hier nicht so recht nachvollziehen, hab zwar lokal ein e107 installiert, tu mich aber recht schwer damit :evil: .

Karsten
 

modig

B1G-Software-Kunde
#17
Huhu,
ich war grad' mal kucken bei Dir...
Du musst die eingebundenen Scripts (ganz unten auf der Seite) VOR dem automatischen Aufruf einbinden.
Mit Knopf zum Drücken ist das kein Problem, aber der ist ja weg :).

Karsten
 

Peer-Mario

B1G-Software-Kunde
#18
Sooooooo,

ich habe das Ganze jetzt statt mit der Ajax-Version von e107 mit Sajax umgesetzt und siehe da, es funktioniert genau so, wie ich mir das vorgestellt habe.

Gruß Peer-Mario
 
Top