+1 vote
in SoSci Survey (dt.) by s105421 (200 points)

Hallo!

Ich versuche über JavaScript Daten zu erfassen. Diese speichere ich in einem mehrdim. Array ab. Dieses Array möchte ich dann zum Server schicken und dort speichern.
Hierfür benutze ich den Fragetyp "Datei-Inhalte übertragen.".

Ist es richtig, dass ich den JS-Code in die Frage schreibe, also in den Punkt "Zusätzlicher HTML-Code"?

Wie versende ich den Blob? (Ich schreibe im JS %q.id%.sendBLOB(recordedBlob); , dies scheint nicht zu funktionieren. recordedBlob ist hierbei testweise var recordedBlob = new Blob(['foo', 'bar'], { type: 'plain/text', endings: 'native' });).

Vielen Dank!
Oliver

1 Answer

+1 vote
by SoSci Survey (327k points)
selected by s105421
 
Best answer

Ja, der "zusätzliche HTML-Code" ist dafür gedacht, dass man Code direkt mit der Frage verwalten kann.

Da Problem liegt vermutlich darin, dass ein Array kein BLOB ist. Vermutlich wäre folgendes Vorgehen einfacher: Verwenden Sie eine interne Variable und speichern Sie die JSON-Repräsentation des Arrays in die Variable.

Die Frage "Datei-Inhalte übertragen" legt eine separate Datei an (ähnlich wie beim Hochladen von Dateien), die "interne Variable" würde den Inhalt als String direkt im Datensatz speichern. Nach nach geplanter Analyse kann das eine oder das andere effizienter sein.

Wenn es nicht klappt: Könnten Sie einen Pretest-Link (bitte direkt) zur betroffenen Seite posten? Dann kann ich mir das Setting einmal ansehen.

by s105421 (200 points)
Der dazugehörige Code:


<div id="counter">0</div>
<p id="paragraph"></p>

<script type="text/javascript">

//var blob = new Blob(['foo', 'bar', 'kein Komma'], {type : "text/plain"}); //, { type: 'plain/text', endings: 'native' }

var debug = {hello: "world"};
var blob = new Blob([JSON.stringify(['foo', 'bar', 'kein Komma'])]);

var myReader = new FileReader();

myReader.addEventListener("loadend", function(e){
    document.getElementById("paragraph").innerHTML = e.srcElement.result;//prints a string
});

myReader.readAsText(blob);
%q.id%.sendBLOB(blob);

</script>
by SoSci Survey (327k points)
Okay, dieses Script ruft sendBLOB() nur einmal direkt beim Laden der Seite auf. Ich vermute, das ist nicht das, was Sie eigentlich machen möchten?

Die Fehlerkonstole meldet entsprechend: "AB02 is not defined" - weil die Frage zu diesem Zeitpunkt noch überhaupt nicht initialisiert ist.
by s105421 (200 points)
vielen Dank!

Nun versende ich den Blob mit einem Button :)
Klappt alles!

Notiz:
Strings können mit var blob = new Blob([string], {type : "text/plain"}); als Parameter in einen Blob übergeben werden.
Die Blob Eingabe wird als txt Datei hochgeladen. So ist es möglich Ergebnisse als Textdateien auszugeben :)

Danke!
by s105421 (200 points)
Hallo!

Ich speichere einen Text (String) per Blob ab. Dieser Text wird durch JavaScript generiert. Nun wollte ich fragen: In wie weit besteht die Gefahr, dass jemand das JS austauscht und eine bösartiges Script mit dem Blob schickt.

Kann ich serverseitig überprüfen, dass der Blob keine besonderen Zeichen (die nicht auftauchen sollten) enthält?

Zwar lädt man die einzelnen .txt Dateien nur herunter und führt diese nicht aus, jedoch will ich verhindern, dass man bösartige Scripte später bei der Datenanalyse in R oder Python benutzt.

Vielen Dank!
by SoSci Survey (327k points)
Solange Sie in R oder Python kein `eval()` bzw. Pendants verwenden, halte ich das Risiko für sehr überschaubar. Wenn Sie filtern möchten, dann wäre direkt nach dem Download in R eine gute Gelegenheit.

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

...