dobra: mehrere Zufallsartikel mit AJAX ausgeben

Hallo,

mit Perl kann ich beliebig viele *verschiedene* Zufallsartikel ausgeben
(einfach die Funktion x mal aufrufen)

Mit Ajax schaffe ich das einfach nicht :(

Mein Script:

...  
print "Content-Type: text/plain;charset=ISO-8859-1\n\n";  
my $pCall = JSON::jsonToObj($main::input);  
my %result;  
$result{_call} = $pCall;  
  
if ($pCall->{method} eq 'ajaxrandom') {  
  	  
  my $page = $pCall->{params}[0]; # Seitennummer auf der die Artikel liegen  
  
	   my $ITEM = ssp::db_get_prefix() . "ITEM";  
		my $count = ssp::readSQLData(qq|SELECT ITEMID, ... FROM $ITEM WHERE PGID = $page |, "ITEMID",...);  
			if ($count >= 0) {  
  
				%RANDITEMS = ();  
				$curIndex = -1;  
				srand();		  
					my $ok = 0;  
					my $number = 0;  
					my $check = 0;  
					while (!$ok) {	  
						if ($check > $count) { $curIndex = -1; return; }  
						$number = int(rand($count));  
						$ok = !(defined $RANDITEMS{$number});  
						if ($ok) {  
							$RANDITEMS{$number}	= 1;  
							$curIndex = $number;  
						}  
						$check = $check + 1;  
					}		  
					  
						my $artikel = ssp::get_var_db("DESCR",$curIndex);  
						my $img = ssp::get_var_db("IMG",$curIndex);  
						... (div DB-Abfragen mit Formatierungen)  
						  
							$result{_random1} = qq|  
								<div class="randombox" style="float:left; margin: 10px;">  
									<div class="header"> Ausgabe der Artikelbeschreibung, Bild etc.</div>  
								</div>  
							|;	  
					  
		}			  
}  
  
	  
print JSON::objToJson(\%result);  
exit 0;  
...  

der JS-Teil:

function myrandom(seite){  
  
 if (-1 != myinterfacerandom.search(/__xxpath__\?/)) {  
      return;  
  }  
  
  var postdata = {  
			method : 'ajaxrandom',  
			id : 0,  
			params : [seite]  
		};  
	try {  
		req = new HTTP.Request(  
		{  
			uri: myinterfacerandom,  
			postbody: postdata.toJSONString(),  
			onSuccess: function (trans) {  
				 var data;  
				try {  
					data = eval('('+trans.responseText+')'); // JSON "parsen"  
				} catch(e) {  
					return;  
				}  
        var result_ramdom1 = data['_random1']; //Resultate übergeben	  
  
				document.getElementById("random1").innerHTML = result_ramdom1;  
			}  
		}  
		);  
	}  
	catch(e)  
	{  
		return;  
	}  
    return false;  
}  

HTML:

<body onload="myrandom('1200001270');">  
...  
	<div style="display:block; height: 200px; overflow:hidden;">  
			<div id="random1"><noscript>__randomitem::randomize__ __randomitem::test__</noscript> </div>  
			<div id="random">__randomitem::randomize__ __randomitem::test__ </div>  
			<div id="random">__randomitem::randomize__ __randomitem::test__ </div>  
			<div id="random">__randomitem::randomize__ __randomitem::test__ </div>  
			<div id="random">__randomitem::randomize__ __randomitem::test__ </div>  
			<div id="random">__randomitem::randomize__ __randomitem::test__ </div>  
	</div>  

wobei das
 __randomitem::randomize__ __randomitem::test__
die Perl-Funktion ausgibt (das soll auch zusätzlich drin bleiben, wegen der paar wenigen Besuchern, die JS deaktiviert haben)

Grund, warum ich das mit Ajax machen möchte, wo's doch mit Perl funktionert:
Meine Shopsoftware erstellt aus jeder dynamischen Seite eine *echte* statische für die SUMAs.
Auf diesen statischen Seiten funktioniert die Zufallsanzeige aber NICHT mit Perl - mit Ajax schon ....

Ich habe gestern stundenlang alles mögliche (for und while Schleifen, mehrfache DB-Abfragen mit ssp::get_var_db("DESCR",$curIndex +1); $curIndex +2 ... und so weiter versucht.
Hab's einfach nicht geschafft :(
hat alles nicht funktioniert, nur den Perl Interpreter hab ich zum Absturz gebracht und ein paar Endlosschleifen programmiert ;)

Kann mir bitte jemand helfen?
(P.S.: ich bin ein Newby mit Ajax - bitte um Nachsicht)

  1. Nachtrag:

    hier der Link zur statischen Seite:
    http://www.shoppilot.at/Demo_Funktions-Shop/

    Der erste (linke) Artikel wird mit Ajax ausgegeben - die restlichen mit Perl = kein Wechsel auf der statischen Seite.

    mfG
    dobra

  2. Hallo dobra!

    Bei Deinem Ajax-Problem werde ich Dir mangels an Erfahrung in der Materie nicht helfen können, aber:

    eine *echte* statische für die SUMAs.

    Ein Suchmaschinenbot ist ein User-Agent wie jeder andere, sie erhalten wie ein Browser das, was ihnen serviert wird - ob statisch oder vom Server mit Hilfe von Perl oder PHP geliefert.

    Es ist also nicht notwendig, aus Rücksicht auf SUMAs statische Seiten zu erstellen.

    Viele Grüße aus Frankfurt/Main,
    Patrick

    --
    _ - jenseits vom delirium - _

       Diblom   [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
    Achtung Agentur! | Nichts ist unmöglich? Doch! | Heute schon gegökt?
  3. Warum lässt du die Zufallssache nicht das DBMS erledigen?

  4. Hallo,

    mit Perl kann ich beliebig viele *verschiedene* Zufallsartikel ausgeben
    (einfach die Funktion x mal aufrufen)

    Mit Ajax schaffe ich das einfach nicht :(

    Was hat bei Dir Ajax mit Perl zu tun? Erzeugst Du mit Perl die Ajax-Response? Wenn ja, sollte es ja kein Problem sein, da mit Perl was Zufälliges erzeugen und zu senden.

    Hotti

    1. Was hat bei Dir Ajax mit Perl zu tun? Erzeugst Du mit Perl die Ajax-Response? Wenn ja, sollte es ja kein Problem sein, da mit Perl was Zufälliges erzeugen und zu senden.

      ja - und DANKE für den Hinweis :)

      Hat zwar etwas gedauert, aber jetzt hab ich die "Zufallsgeschichte" wirklich komplett mit Perl gemacht und dann erst das fertige Ergebnis übergeben.

      Es funktioniert, wie es soll :D

      mdG
      dobra

      1. h11,

        Es funktioniert, wie es soll :D

        Juhu!!! Freut mich doch auch :-)

        JSON Opfer schmeißen irgendwann den aufgeblasenen Mist auf dem Müll und programmieren das bischen Ajax von Hand.

        Hotti

        1. JSON Opfer schmeißen irgendwann den aufgeblasenen Mist auf dem Müll und programmieren das bischen Ajax von Hand.

          Das riecht nach bewusster Provokation. Langeweile? ;-)

          Im Ernst: Bitte schau dir nur ein einziges Mal an, wie elegeant und schlank du damit arbeiten kannst. Ich prognostiziere dir max. 1/2 h Zeitaufwand bis zu deinem persönlich Aha-Erlebnis.

          Hier schonmal:
          Perl JSON Modul

          Danach darfste auch gerne - fundiert - provozieren ;-)

          1. ... Ich prognostiziere dir max. 1/2 h Zeitaufwand bis zu deinem persönlich Aha-Erlebnis.

            Nachtrag: Das gilt nur, sofern du perlseitig sinnvolle Datenstrukturen verwendest und nicht auch auf wilde Trennzeichen- / Splitorgien setzt.  *g*

  5. Kann mir bitte jemand helfen?
    (P.S.: ich bin ein Newby mit Ajax - bitte um Nachsicht)

    Der erste Schritt wäre erstmal die Fehlermeldungen und Warnungen zu beseitigen, die Firefox ausgibt. Da liegt einiges im argen und macht die Fehlersuche fast unmöglich.

    Struppi.