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)