0 votes
in SoSci Survey (dt.) by s077606 (130 points)
edited by s077606

Hallo,

ich habe folgendes Problem. Ich möchte ein Befragungsprojekt mit vier verschiedenen Szenarien durchführen. In jedem Szenario befindet sich ein Versuch, in welchem bestimmte Zahlen einer Zahlenreihe markiert werden sollen. Hierfür haben die Teilnehmer 90 Sekunden Zeit, was ich mit dem Textbaustein Timer festgelegt habe:

<script type="text/javascript">
<!--
// Funktion zur Weiterleitung
function weiter() {
  // Eine Meldung anzeigen (optional)
  alert("Die Zeit ist vorbei.");
  // Den Teilnehmer zur nächsten Seite weiterleiten
  SoSciTools.submitPage();
}
// Countdown anzeigen
var date0 = new Date();
var timeout = date0.getTime() + %remain% * 1000;
function updateCountdown() {
  // Zeit berechnen
  var date = new Date();
  var time = Math.ceil((timeout - date.getTime() - 50) / 1000);  // Verbleibende Zeit in Sekunden
  // Zeit anzeigen
  var out = document.getElementById("remain");
  if (!out) {
    return;
  }
  while (out.lastChild) {
    out.removeChild(out.lastChild);
  }
  var minutes = Math.floor(time / 60);
  var seconds = String(time - 60 * minutes);
  if (seconds.length < 2) seconds = "0" + seconds;
  var display = String(minutes) + ":" + seconds;
  var displayNode = document.createTextNode(display);
  out.appendChild(displayNode);
}
// Initialisierung der Weiterleitung
SoSciTools.attachEvent(window, "load", function(evt) {
  // Weiter-Knopf ausblenden (optional)
  SoSciTools.submitButtonsHide();
  // Zusätzlicher Timer für die Aktualisierung des Countdowns
  window.setInterval(updateCountdown, 1000);
  updateCountdown();
  // Timer für automatische Weiterleitung starten
  window.setTimeout(weiter, %remain% * 1000);
});
// -->
</script>

Weiterhin befindet sich ein PHP-Code auf der Seite:

if (!isset($time5)) {
  $time5 = time();
  registerVariable('time5');  // Die Variable $time5 auch nach Ende des PHP-Codes aufbewahren
}
// Prüfung, ob die Zeit schon abgelaufen ist
// (z.B. weil der Teilnehmer die Seite neu geladen hat)
$timer = 90;  // Der Teilnehmer hat 1 Minute (60 Sekunden) Zeit zur Bearbeitung
if (time() >= $time5 + $timer) {
  goToPage('next');
}
// Die verbleibende Zeit muss auch dem JavaScript-Code bekannt gemacht werden
$remain = $time5 + $timer - time();
replace('%remain%', $remain);

und ein HTML Code:

<p>Verbleibende Zeit: <span id="remain"></span></p>

wenn ich nun in meinem Fragebogen zu der Seite gelange und die Zeit abgelaufen ist, kommt in jedem der Szenarien folgende Fehlermeldung:

Fatal error: Maximum execution time of 5 seconds exceeded in /var/www/soscisurvey/html/inc/CacheRead.php on line 139

Folgende Anmerkung kann ich noch treffen: zwei Seiten zuvor, findet sich die fast identische Seite, mit den fast identischen Codes (bei dem PHP Code wurde die Variable $time verändert). Hier tritt die Fehlermeldung nicht auf und die Weiterleitung auf die nächste Seite funktioniert fehlerfrei.

Bitte um dringende Hilfe.

viele Grüße

by SoSci Survey (305k points)
Der Code wird wesentlich besser leserlich, wenn man ihn markiert und dann auf den Knopf {} klickt. Ich habe das in Ihrer Frage einmal entsprechend editiert.
by SoSci Survey (305k points)
Was die Fehlermeldung angeht ... schwer zu sagen. Ich sehe in dem Code nichts, was direkt mit dem Fehler zusammenhängen könnte. Meine erste Vermutung wäre ein temporäres Problem auf dem Server - aber das würde in den Fehlerlogs des Servers anders aussehen.

Die in der Fehlermeldung bezeichnete Funktion deutet eher darauf hin, dass es Probleme mit dem Umfang Ihres Projekts geben könnte. Was verwenden Sie auf der Seite denn an Fragen - sprich: welche Fragetypen?
by s077606 (130 points)
Vielen Dank für die bessere Darstellung der Codes.

auf der Seite verwende ich an sich keine Fragen. Die Seite beinhaltet lediglich 16 "Fragen" mit Mehrfachauswahl. Pro "Frage" ist eine Zahlenreihe mit 99 Items in Kärtchenform dargestellt, damit die Teilnehmer Zahlen markieren können, welche ich letztenendes auswerten möchte. Einen Fragetext gibt es nicht.
Gerne würde ich noch anmerken, dass zwei Seiten zuvor, der gleiche Aufbau der Seite und der "Fragen" ist, und dort wie bereits erwähnt, die Fehlermeldung nicht auftritt.

Gerne kann ich Ihnen einen Pretest des Fragebogens in den Kommentaren hinterlassen, wenn dies hilfreich ist?
by SoSci Survey (305k points)
Ja, bitte posten Sie einmal einen Pretest-Link zur betroffenen Seite. Für die Klärung des Problems könnte es aber erforderlich werden, dass ich mich direkt in den Fragebogen einlogge. Wäre es für Sie in Ordnung, wenn ich ein Administrator-Login für das Projekt anlege?
by s077606 (130 points)
Hier der Link zu einem Pretest von einem meiner Fragebögen.

https://www.soscisurvey.de/hci_umfrage2017/?act=RVjCWElBWrBUxrrCHqWjetSg

Selbstverständlich ist es für mich in Ordnung, wenn Sie ein Administrator-Login für das Projekt anlegen.
by SoSci Survey (305k points)
Danke für den Link. kleiner Tipp vorweg: Wenn Sie im Layout folgende Zeile ergänzen, können Sie die Zahlen in einer lesbaren Größe formatieren:

.s2iSelection.cards.js div.option > div.label {
  padding: 0 0.2em;
}
by s077606 (130 points)
Vielen Dank für den Hinweis. Ich habe die Schriftgröße jedoch absichtlich so klein gewählt, da es nicht so einfach sein soll, die 7er zu erkennen (die war der Wunsch meiner betreuenden Professorin).

1 Answer

0 votes
by SoSci Survey (305k points)
edited by SoSci Survey

Danke für den Pretest-Link.

Das Problem scheint - nach einer ersten Überprüfung - darin zu liegen, dass 16 Mutliple-Choice-Fragen mit jeweils 99 Antwortoptionen = mehr als 1500 Variablen pro Seite ein wenig arg viel sind. Der technische Overhead dabei ist enorm.

Wenn man so ein Abfrageformat häufiger einsetzen wollte, wäre es vermutlich sinnvoll, mittels JavaScript eine andere Lösung zu basteln. Etwa eine, die zwar die Kästchen zum markieren anzeigt, die Daten aber nicht in 1000 einzelne Variablen schreibt, sondern nur in eine. Und die vielleicht auch gleich die Zählung vornimmt und die vorgegeben Zahlen evtl. noch zufällig auf der Seite verteilt.

Das eigentliche Problem entsteht beim Einlesen der Antworten vom Teilnehmer. Könnten Sie testweise einmal versuchen, was passiert, wenn Sie nach der Seite mit dem Nachversuch noch eine Fragebogenseite packen und einen Textbaustein darauf stellen? Ich würde nicht ausschließen, dass der Fehler durch die ns und des Erreichens der letzten Seite entsteht.

Abgesehen davon muss ich noch einmal en detail durchleuchten, an welcher Stelle genau die Probleme entstehen. Das könnte aber ein paar Tage dauern...

Edit

Wir haben den Code nun ein klein wenig optimiert - das sollte eigentlich ausreichen, damit das Problem nicht wieder auftritt. Falls doch, geben Sie bitte Bescheid!

by s077606 (130 points)
Vielen Dank für Ihre Antwort.
Leider kenne ich mich in JavaScript nicht aus um Ihre Lösung (welche sich vielversprechend anhört), zu basteln.

Ich habe testweise eine Fragebogenseite nach der Seite mit dem Nachversuch eingebaut und einen Textbaustein darauf gestellt. Leider ist das Problem dadurch nicht gelöst.

Was denken Sie, wie viele Variablen auf einer Seite stehen könnten, OHNE dass die Seite zusammenbricht? sind 10 x 99 = 990 Variablen denkbar? Dann würde ich den Versuch ggf. anpassen....

Schon einmal vielen Dank für Ihre wirklich hilfreiche Antworten
by SoSci Survey (305k points)
Wenn ich es richtig sehe, haben Sie die Seite bereits ein wenig abgespeckt. Sie sollte nun auf jeden Fall ein wenig schneller laufen - und jetzt sollte die Abfrage auch mit mehr Variablen möglich sein.
by s077606 (130 points)
Genau, ich habe die Seiten etwas abgespeckt, da ich meiner Professorin einen laufenden Fragbogen vorlegen musste. was meinen Sie damit, dass die Abfrage nun auch mit mehr Variablen möglich sein sollte? Haben Sie das ursprüngliche Problem gelöst? Kann ich meine "Zahlenreihe" wieder auf das ursprüngliche Format erweitern?

Viele Grüße
by SoSci Survey (305k points)
Ja, ich denke, die Änderung sollte ausreichen, um die ursprünglichen Zahlenreihen zu verarbeiten. Sollte ich in meiner Einschätzung falsch liegen, teilen Sie mir das bitte mit - es gäbe noch eine zweite mögliche Optimierung, aber diese haben wir noch nicht eingepflegt.

Denken Sie bitte auch an meinen Hinweis oben, dass sich die Lesbarkeit der Zahlen in Ihrem Test deutlich steigern ließe, wenn man eine kleine Änderung im Layout vornimmt.
by s077606 (130 points)
Hallo,
Entschuldigen Sie bitte die späte Antwort. Es kommt die Fehlermeldung nun nicht mehr. Vielen Dank.
Ich hätte jedoch folgende Frage: kann man die einzelnen Items der Zahlenreihen farblich hervorheben? Ist dies möglich? Z.B. Dass ich alle 0en grau hervorhebe?
Für eine kurze Antwort wäre ich sehr dankbar.
by SoSci Survey (305k points)
Ich glaube, das wäre in einer neuen Frage besser untergebracht. Es geht nach wie vor um die Mehrfachauswahl, die als "Kärtchen" dargestellt wird - und im Idealfall haben Sie mittlerweile auch das Layout ein wenig angepasst, um den Weißraum zu verringern?

Dann ließen sich bestimmte Werte wohl durch ein <div style="background-color: gray">0</div> mit einem Hintergrund versehen. Nicht besonders elegant, aber vermutlich funktional.

Eleganter wäre eine Lösung, bei der Sie mittels JavaScript alle Optionen absuchen (diese lassen sich durch die CSS-Selektoren recht einfach auflisten) und wenn der Inhalt den Wert "0" hat, dann das äußere Blockelement (also das Kästchen) automatisiert einfärben. Ein klein wenig JavaScript-Übungs sollte man dafür allerdings schon haben.

Wenn Sie dazu detailliertere Informationen benötigen: Bitte als neue Frage im Online-Support und mit Pretest-Link zur aktuellen Darstellung. Danke.
by s077606 (130 points)
Vielen Dank für Ihre beiden Antworten. Das mit dem Urlaub verstehe ich natürlich vollkommen.
Meines Erachtens kann ich, wenn ich den Befehl <div style="background-color:gray">0</div> nur ganze Blöcke von Zahlen einfärben oder? Oder wird durch den Befehl "0" nach 0en gesucht?
Ich werde diese Möglichkeit auf jeden Fall ausprobieren.
Falls dies nicht den gewünschten Effekt mit sich bringt, werde ich mich nochmal melden um auf das JavaScript zurückzugeeifen. Dies werde ich dann jedoch in einer neuen Frage tun, woe gewünscht.
Vielen Dank nochmals
by SoSci Survey (305k points)
Ich meinte, dass Sie das <div>...</div> direkt im Itemtext bei den einzelnen 0ern einfügen - also nicht rund um die Frage.
by s077606 (130 points)
Ich habe verstanden was Sie meinen. Ich habe das <div>...</div> direkt in das Itemtext gestellt. Grundsätzlich wäre dies meines Erachtens nach ausreichend, jedoch wird "nur" die Zahl markiert, sprich es wird nicht das komplette Kästchen markiert (hier ein Pretest Link, damit Sie sehen, was ich meine: https://www.soscisurvey.de/hci_umfrage2017/?act=wPnVGwBZmiFeGjAUFMrCgH9g
die markierten Stellen befinden sich auf Seite 8 (ein Item habe ich gelb markieren lassen, da die Zahlen bei grau kaum sichtbar sind))

Ist es mit Hilfe dieser Variante möglich, das komplette Kästchen einfärben zu lassen?
Gibt es auch einen Befehl mit Hilfe dessen ich sagen kann, dass die markierten Kästchen nicht mehr "anklickbar" sind?

Wieder vielen Dank und Daumen hoch für den überragenden Support :)
by SoSci Survey (305k points)
Nun, das war es was ich meinte, als ich oben mehrfach schrieb, dass Sie sich noch um die Innenabstände kümmern müssten (ursprünglich mit Bezug auf die viel-zu-kleine Schrift). Sonst bleibt für den Hintergrund nicht mehr Platz. Details gerne in einer neuen Frage.

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

...