0 votes
in SoSci Survey (dt.) by s181995 (120 points)

Mein Fragebogen besteht aus knapp 1500 Seiten. Die Items in den Fragen werden zufällig links oder rechts angezeigt. Auf jeder Seite wird eine Frage gezeigt. Mittels shuffle() rotieren die Items. Der Fragebogen zeigt im DEBUG-Modus keinen Fehler an, jedoch bricht er ab Seite 886 ab und zeigt folgende Meldung:

Mit dem Eintrag für rotation.11024002 würden die Zusatz-Daten in diesem Interview die Grenze von 64 KB überschreiten. Der Wert für rotation.11024002 kann daher nicht gespeichert werden. Dies kann zu Fehlern im Fragebogen führen, zum Beispiel zum Abbruch der Befragung.

Ich bitte um Hilfe.

Liebe Grüße

1 Answer

0 votes
by SoSci Survey (302k points)

Mein Fragebogen besteht aus knapp 1500 Seiten.

Das ist ein wenig übertrieben und deutlich außerhalb des normalen Anwendungsbereichs :)

Ich gehe einmal davon aus, dass die Seiten entweder sehr, sehr kurz sind und/oder dass eine einzelne Person nicht alle Seiten ausfüllen muss? Ansonsten wäre man ja schon mit 5 Sekunden pro Seite mehr als 2 Stunden mit dem Ausfüllen beschäftigt.

Vielleicht könnten Sie den Anwendungsfall (und wie Sie auf 1500 Seiten kommen) einmal erläutern. Dann tue ich mich mit einer konstruktiven Antwort leichter.

by s181995 (120 points)
Der Fragebogen ist ein Online Experiment. Pro Seite ist nur eine Frage. Man vergleicht 2 Fotografien miteinander hinsichtlich der Augengröße. Die Hälfte der Seiten ist ein Blank Screen (weiße Seite, die nach 1 Sek mit Timer zur nächsten Frage leitet), diese weißen Seiten werden nach jeder Frage kurz eingeblendet. Also beträgt die Anzahl mit Fragen, die tatsächlich beantwortet werden sollen, nur 750 Seiten.
by SoSci Survey (302k points)
> Die Hälfte der Seiten ist ein Blank Screen (weiße Seite, die nach 1 Sek mit Timer zur nächsten Frage leitet)

Das wäre es m.E. deutlich (!) effizienter, die Frage mittels JavaScript einfach erst nach einer Sekunde einzublenden: https://www.soscisurvey.de/help/doku.php/de:create:timer-display (nur dass Sie nicht den Weiter-Knopf einblenden, sondern die Frage).

Falls Sie tatsächlich 1500 Seiten angelegt haben, wäre es vermutlich weiterhin sinnvoll, mit loopPage() zu arbeiten, falls Sie das nicht ohnehin schon machen. Dann brauchen Sie effektiv nur 2 Seiten.

Das "rotation.11024002", was in dern internen Daten gespeochert wird, stammt von der automatischen Rotation der Optionen in der Frage. Das ist dann sinnvoll, wenn man mittels Zurück-Knopf oder wegen einer fehlenden Antwort die Frage nochmal bekommen kann. Wenn das nicht relevant ist, können Sie einfach mittels shuffle() die Optionen rotieren, ohne die Rotation zu speichern.

Last but not least: Ich habe schwere methodische Bedenken, ob Rater nach >30 Bildern wirklich noch klar denken und eine sinnvolle Antwort geben können. Bei 750 Seiten würde ich nur noch Rauschen erwarten.
by s181995 (120 points)
okay, vielen Dank.

Ich habe die Rotation der Items jetzt mittels shuffle() erzeugt.
Die Wiederholungen habe ich nun mit loopPage() gemacht. Aber jetzt wird mir die Meldung:

Sie speichern Zusatz-Daten (%fragen%) mit mehr als 2 KB in diesem Interview. Bitte verwenden Sie für umfangreiche Platzhalter den Befehl show() anstatt replace().

angezeigt.

Mein aktueller PHP-Code lautet:
loopToPage('loopend', 14);
$fragen = array(
  0 => array('G101', 'G102', 'G103', 'G104', 'G105','G106', 'G107', 'G108', 'G109', 'G110','G111', 'G112', 'G113', 'G114','G115', 'G116','G117', 'G118', 'G119', 'G120','G121', 'G122','G123', 'G124', 'G125', 'G126','G127', 'G128'),
  1 => array('G201', 'G202', 'G203', 'G204', 'G205','G206', 'G207', 'G208', 'G209', 'G210','G211', 'G212', 'G213', 'G214','G215', 'G216','G217', 'G218', 'G219', 'G220','G221', 'G222','G223', 'G124', 'G125', 'G226','G227', 'G228'),
  2 => array('G301', 'G302', 'G303', 'G304', 'G305','G306', 'G307', 'G308', 'G309', 'G310','G311', 'G312', 'G313', 'G314','G315', 'G316','G317', 'G318', 'G319', 'G320','G321', 'G322','G323', 'G324', 'G325', 'G326','G327', 'G328'),
  3 => array('G401', 'G402', 'G403', 'G404', 'G405','G406', 'G407', 'G408', 'G409', 'G410','G411', 'G412', 'G413', 'G414','G415', 'G416','G417', 'G418', 'G419', 'G420','G421', 'G422','G423', 'G424', 'G425', 'G426','G427', 'G428'),
  4 => array('G501', 'G502', 'G503', 'G504', 'G505','G506', 'G507', 'G508', 'G509', 'G510','G511', 'G512', 'G513', 'G514','G515', 'G516','G517', 'G518', 'G519', 'G520','G521', 'G522','G523', 'G524', 'G525', 'G526','G527', 'G528'),
  5 => array('G601', 'G602', 'G603', 'G604', 'G605','G606', 'G607', 'G608', 'G609', 'G610','G611', 'G612', 'G613', 'G614','G615', 'G616','G617', 'G618', 'G619', 'G620','G621', 'G622','G623', 'G624', 'G625', 'G626','G627', 'G628'),
  6 => array('G701', 'G702', 'G703', 'G704', 'G705','G706', 'G707', 'G708', 'G709', 'G710','G711', 'G712', 'G713', 'G714','G715', 'G716','G717', 'G718', 'G719', 'G720','G721', 'G722','G723', 'G724', 'G725', 'G726','G727', 'G728'),
  7 => array('G801', 'G802', 'G803', 'G804', 'G805','G806', 'G807', 'G808', 'G809', 'G810','G811', 'G812', 'G813', 'G814','G815', 'G816','G817', 'G818', 'G819', 'G820','G821', 'G822','G823', 'G824', 'G825', 'G826','G827', 'G828'),
  8 => array('G901', 'G902', 'G903', 'G904', 'G905','G906', 'G907', 'G908', 'G909', 'G910','G911', 'G912', 'G913', 'G914','G915', 'G916','G917', 'G918', 'G919', 'G920','G921', 'G922','G923', 'G924', 'G925', 'G926','G927', 'G928'),
  9 => array('GA01', 'GA02', 'GA03', 'GA04', 'GA05','GA06', 'GA07', 'GA08', 'GA09', 'GA10','GA11', 'GA12', 'GA13', 'GA14','GA15', 'GA16','GA17', 'GA18', 'GA19', 'GA20','GA21', 'GA22','GA23', 'GA24', 'GA25', 'GA26','GA27', 'GA28'),
  10 => array('GB01', 'GB02', 'GB03', 'GB04', 'GB05','GB06', 'GB07', 'GB08', 'GB09', 'GB10','GB11', 'GB12', 'GB13', 'GB14','GB15', 'GB16','GB17', 'GB18', 'GB19', 'GB20','GB21', 'GB22','GB23', 'GB24', 'GB25', 'GB26','GB27', 'GB28'),
  11 => array('GC01', 'GC02', 'GC03', 'GC04', 'GC05','GC06', 'GC07', 'GC08', 'GC09', 'GC10','GC11', 'GC12', 'GC13', 'GC14','GC15', 'GC16','GC17', 'GC18', 'GC19', 'GC20','GC21', 'GC22','GC23', 'GC24', 'GC25', 'GC26','GC27', 'GC28'),
  12 => array('GD01', 'GD02', 'GD03', 'GD04', 'GD05','GD06', 'GD07', 'GD08', 'GD09', 'GD10','GD11', 'GD12', 'GD13', 'GD14','GD15', 'GD16','GD17', 'GD18', 'GD19', 'GD20','GD21', 'GD22','GD23', 'GD24', 'GD25', 'GD26','GD27', 'GD28'),
  13 => array('GE01', 'GE02', 'GE03', 'GE04', 'GE05','GE06', 'GE07', 'GE08', 'GE09', 'GE10','GE11', 'GE12', 'GE13', 'GE14','GE15', 'GE16','GE17', 'GE18', 'GE19', 'GE20','GE21', 'GE22','GE23', 'GE24', 'GE25', 'GE26','GE27', 'GE28')
);
registerVariable($fragen

$i = loopToPage('loopend', 14);
// Nun den Teil aus $fragen abrufen, der für die jeweilige Runde relevant ist
$set = $fragen[$i];
// Die erste Frage davon anzeigen
$items = getItems($set[0], 'all');
shuffle($items);
question($set[0], $items);

Wie kann ich diese Warnung jetzt umsetzen?
Vielen Dank für Ihre Hilfe.

Die Anzahl der Fragen ist leider so gefordert....
by SoSci Survey (302k points)
> Sie speichern Zusatz-Daten (%fragen%) mit mehr als 2 KB in diesem Interview.

Das ist erstmal nur ein Hinweis ... wenn Sie wissen, woher das kommt (wissen Sie), dann können Sie diesen auch einmal ignorieren. Anders als die Fehlermeldung, die bei der harten Grenze von 32 KB erscheint.

Ihr Code zieht, wenn ich das richtig sehe, aus jeder Gruppe eine Frage und zeigt am Ende 14 Fragen an. Außerdem fehlt da noch ein isset() und registerVariable(), vgl. https://www.soscisurvey.de/help/doku.php/de:create:functions:registervariable um das shuffle() außenherum.
by s181995 (120 points)
Danke für den Hinweis, ich habe isset() und registerVariable() nun ergänzt.

Jedoch funktioniert der JavaScript nicht ganz, da es ja mit loop() kombiniert wird. Auf einer Seite (bspw.) steht jetzt der Code:

$i = loopIndex();
$set = $fragen[$i];
// Die nächste Frage (Index 2) anzeigen
if (!isset($items)) {
$itemsC = getItems($set[2], 'all');
shuffle($itemsC);
registerVariable($itemsC);
}
question($set[2], $itemsC);

Nun habe ich den JavaScript Code folgendermaßen aufgebaut:

<script type="text/javascript">
<!--
 
// Funktion zum Einblenden der Knöpfe
function showContent() {
  var content = document.getElementById("question");
  // Den normalen Anzeigemodus wiederherstellen
  content.style.display = "";
}
 
// Nach dem Laden der Fragebogen-Seite das Script starten
SoSciTools.attachEvent(window, "load",
  function() {
    // Objekt heraussuchen
    var content = document.getElementById("question");
    // Ausblenden
    content.style.display = "none";
    // Den Timer starten
    window.setTimeout(showContent, 1000); // Nach 1 Sek = 1.000 ms
  }
);
 
// -->
</script>

Leider funktioniert dieser nicht.. Über eine Hilfestellung, wie der Code auszusehen hat, würde ich mich sehr freuen.
by SoSci Survey (302k points)
Ich bin nicht sicher, ob der PHP-Code stimmt, aber ich kenne auch nicht die genaue Randomisierung und Sie können Sie das besser überprüfen als ich.

> var content = document.getElementById("question");

Sie brauchen hier die Frage-Kennung? Verwenden Sie dafür einen Platzhalter. Im PHP-Code also...

question($set[2], $itemsC);
replace('%frage%', $set[2]);

Und im JavaScript-Code

var content = document.getElementById("%frage%_qst");
by s181995 (120 points)
Vielen Dank, das hat mir sehr weitergeholfen!

Der Fragebogen besteht jetzt nur noch aus 75 Seiten und ich habe den JavaScript-Code umgeschrieben und er funktioniert!

Jetzt rätsel ich nur noch darüber, wie man nun eine Rotation der Seiten reinbekommt, die mit loop() 14x wiederholt werden..

Hierfür habe ich die Funktion shuffle() benutzt, aber jetzt weiß ich nicht wo ich das shuffle() in den loop() PHP Code einfügen muss.  

Mein Vorschlag wäre:

$i = loopIndex();
$set = $fragen[$i];
// Die nächste Frage (Index 2) anzeigen
if (!isset($items)) {
$itemsB = getItems($set[1], 'all');
shuffle($itemsB);
registerVariable($itemsB);
}
question($set[1], $itemsB);
replace('%frage1%', $set[1]);
shuffle('%frage1%', $set[1]);

Wäre das korrekt?

Dankeschön! Sie haben mir bis hier hin wirklich sehr weitergeholfen.
by SoSci Survey (302k points)
> Jetzt rätsel ich nur noch darüber, wie man nun eine Rotation der Seiten reinbekommt, die mit loop() 14x wiederholt werden..

Zeigen Sie auf jeder dieser 14 Seiten eine Frage oder ganz viele?

> shuffle('%frage1%', $set[1]);

Was Sie damit bezwecken, verstehe ich nicht - aber es wird nicht funktionieren. shuffle() erwartet genau einen Parameter und dieser muss ein Array sein, das Sie mischen möchten.

Willkommen im Online-Support von SoSci Survey.

Hier bekommen Sie schnelle und fundierte Antworten von anderen Projektleitern und direkt von SoSci Survey.

→ Eine Frage stellen


Welcome to the SoSci Survey online support.

Simply ask a question to quickly get answers from other professionals, and directly from SoSci Survey.

→ Ask a Question

...