0 votes
in SoSci Survey (dt.) by s109993 (12.0k points)
edited by s109993

Hallo,

das ist quasi eine Art Folgefrage. Wir haben einen SoSci Fragebogen als iframe in LimeSurvey eingebettet. Nun sollen die Rückgabewerte von einer Variable (+ Serial und Variablen Name) an LimeSurvey übergeben werden, da die dort für Filter verwendet werden. Wäre das generell möglich? Und wenn ja, was wäre der Ansatz dafür?

Ich denke, es sollte über

window.addEventListener("load", function() {

      window.parent.postMessage({ event: 'response', func: 'stored_data' , data: "sid":%SERIAL%, "varname": 'pro Seite wie im pdf', "result": 'gegebene Antwort''}, "*");

}

funktionieren? Leider komme ich mit den Parametern nicht ganz klar. Die Seriennummer sollte ja wahrscheinlich über den Serial Platzhalter übergeben werden. Aber wie würde ich einen Variablennamen und und den entsprechenden Value übergeben?

1 Answer

0 votes
by SoSci Survey (327k points)

Wenn Sie Daten aus dem iFrame an das andere Frame übergeben möchten, wäre .postMessage() ein geeigneter Weg.

Auf die Serial können Sie z.B. per Platzhalter %caseSerial% zugreifen, den Wert müssten Sie mittels replace() via PHP-Code vorher in einem Platzhalter ablegen.

window.parent.postMessage({ 
    serial: "%caseSerial%",
    value: "%somePlaceholder%"
}, "*");

Und natürlich muss im LimeSurvey Frame das passende JavaScript vorhanden sein, um die Daten entgegenzunehmen und dort in den Datensatz zu speichern.

by s109993 (12.0k points)
Super, danke! Würde es folgermaßen dann aussehen? Das Parent Script schreibt der Kunde, deswegen ist es etwas kompliziert :)

<script>

    window.addEventListener("load", function() {

      window.parent.postMessage({ event: 'response', func: 'stored_data' , data: {"sid":"%caseSerial%", "varname": "Variable_xy", "result": "%Value_Placeholder%"} }, "*");

    });
</script>
by SoSci Survey (327k points)
Wie die Daten sortiert sein müssen, das müssen Sie mit dem Kunden klären. Aber ja, das könnte eine mögliche Formulierung sein. Bitte denken Sie daran, dass beim "load" nur die Daten/Antworten von den vorigen Seiten vorliegen, nicht die Antworten der aktuellen Seite.
by s109993 (12.0k points)
Danke! Wie würde ich es bei zwei Variablen auf einer Seite machen? Zwei mal window.parent.postMessage() innerhalb eines EventListener?
by SoSci Survey (327k points)
Das kommt darauf an, was das empfangende Script an Daten braucht ... es handelt sich ja einfach nur um ein verschachteltes Array (Objekt), da da definiert wird. Dort könnte man im Prinzip natürlich auch weitere Werte übermitteln. Ich tippe mal hierauf:

{
    event: 'response',
    func: 'stored_data' ,
    data: {
        "sid":"%caseSerial%",
        "varname1": "%value1%",
        "varname2": "%value2%"
    }
}
by s109993 (12.0k points)
ah, klar, macht Sinn.

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

...