Probleme mit JavaScript

Peer-Mario

B1G-Software-Kunde
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
 
Irgendwo fehlt angeblich ein ";" (IE 6)
Code:
<script type="text/javascript">
function radio()
{
  ajaxdemo.populatepage()
}
</script>
Vielleicht hier?
 
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
 
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
 
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
 
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
 
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
 
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
 
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:
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:
//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*
 
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
 
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:
...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
 
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
 
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
 
Back
Top