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

+1 vote

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

in SoSci Survey (dt.) by s105421 (190 points)

1 Answer

+1 vote
 
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 SoSci Survey (53k points)
selected by s105421
Nimmt ein Blob nicht ein Array als Attribut?

var aBlob = new Blob( array[, options]);

Bisher schreibe ich nur:

var blob = new Blob(['foo', 'bar']);
%q.id%.sendBLOB(blob);

im Script, um zu schauen ob dies überhaupt funktioniert.
Ein BLOB hat per Definition keine Struktur. Was der Konstruktor aus einem Array macht, weiß ich nicht. Möchten Sie denn am Ende eine separate Datei haben?
Die JavaScript-Referenz besagt:

var aBlob = new Blob( array[, options]);

array is an Array of ArrayBuffer, ArrayBufferView, Blob, DOMString objects, or a mix of any of such objects, that will be put inside the Blob. DOMStrings are encoded as UTF-8.

Versuchen Sie es vielleicht einmal mit [JSON.stringify(inputArray)] als Parameter.
Vielen Dank für Ihre Antworten.

Der Blob scheint nicht das Problem zu sein, ich habe es auch mit [JSON.stringify()] schon versucht. Den Blob kann ich immer ohne Probleme auslesen und anzeigen lassen.

Das senden scheint das Problem zu sein (Antwort auf AB02 = -9, Keine Antwort für AB02x02).
"%q.id%.sendBLOB(blob);" ist dies richtig? Gehört etwas in %q.id%?
Das sollte korrekt sein, ja. Wenn Sie einmal den Pretest-Link zur betroffenen Seite posten möchten, sehe ich mir das gerne einmal direkt im Browser an. Ich behaupte, das ist eine der eher selten verwendeten Fragen :)
Hier ist der Pretest-Link (bisher ist nur der Blob implementiert):
https://www.soscisurvey.de/test150036/?act=0Ea7m8p483khIndhAXcr6Mqv

Danke :)
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>
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.
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!
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!
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.
...