Variable aus function an globale Variable übergeben

goecken

Newbie
Registriert
Nov. 2023
Beiträge
6
Hallo zusammen,
das Programm soll Daten im Browser ausgeben. Die Daten werden vom User geprüft und nach Prüfung sollen diese Daten vollständig in eine Datei, die auf den Server liegt, geschrieben werden.

Javascript Quellen:
HTML:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<script src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/9487/papaparse.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/2.0.0/FileSaver.min.js"></script>

Der erste Part / Ausgabe im Browser ist also die Datei zu holen, zu konvertieren und auszugeben.

Die erste function holt sich also eine csv die in json konvertiert und per alert ausgegeben wird. Außerhalb der function benötige ich eine globale Variable, die myJSON auffängt und durch die Variable in der function überschreibt.

Javascript:
let myJSON ="überchreiben";
    $.get("https://media.githubusercontent.com/media/datablist/sample-csv-files/main/files/organizations/organizations-100.csv", function (data) {    
        let csvString = data;
        let papaParseConfigObj = {
            header: true,
            dynamicTyping: true
        }
        let json = Papa.parse(csvString, papaParseConfigObj).data;
        let myJSON = JSON.stringify(json); 

        alert("1 Ausgabe " + myJSON);
        return myJSON;
    });
alert("leere Ausgabe " + myJSON)

Die zweite function ist ein Test wie eine globale Variable durch eine in der function angelegten Variable überschreibt.
Javascript:
function nimmNeuenInput () {
    let json = [{"ID":1,"Name":"Name1","Street":"Sreet1","Location":"Location1"},{"ID":2,"Name":"Name2","Street":"Street2","Location":"Location2"},{"ID":3,"Name":"Name3","Street":"Street3","Location":"Location3"}];
    let finalerInput = JSON.stringify(json);  
    return finalerInput;
}
let finalerInput = nimmNeuenInput();
alert("2 Ausgabe mit " + finalerInput);

Ich möchte also die let myJSON = JSON.stringify(json); an die globale Variable außerhalb der function übergeben.
Wie kann ich das mit der vorhandenen 1. function erreichen?

Vielen Dank und liebe Grüße
 
Rückgabewert oder eine globale Variable definieren.

Javascript:
alert("1 Ausgabe " + myJSON);
        return myJSON;
    });
alert("leere Ausgabe " + myJSON)

das kann so nicht funktionieren, aber vielleicht ja so:
myJSON = $.get(...
edit: nope, weil $.get ein xhr zurück gibt

hier machst du es richtig
Javascript:
let finalerInput = nimmNeuenInput();
das liegt aber nicht daran, dass dein return "finalerInput" lautet. In der Funktion könnte die Variable auch foobar heißen und es würde trotzdem funktionieren.

edit2: das Hauptproblem ist dass $.Get asyncron ist. also auch wenn du es in eine globale Variable speicherst ist die nicht korrekt gesetzt direkt nach dem $.Get.
Du kommst nicht umhin, dich damit zu beschäftigen.
 
Zuletzt bearbeitet:
Das Ziel ist eine Ausgabe in einer Tabelle die vom Benutzer geprüft wird. Wenn die Tabelle stimmt wird der Wert an eine Textdatei auf dem Server übergeben.

Die alert messagebox ist der erste Schritt um erstmal zu schauen ob die Daten überhaupt verarbeitet werden. Um später mit der Variable arbeiten zu können möchte ich die Variable aus der function an die globale Variable übergeben.
 
Dann müsste gehen:

Javascript:
let csvString = await $.get("https://media.githubusercontent.com/media/datablist/sample-csv-files/main/files/organizations/organizations-100.csv");
        let papaParseConfigObj = {
            header: true,
            dynamicTyping: true
        }
        let json = Papa.parse(csvString, papaParseConfigObj).data;
        let myJSON = JSON.stringify(json);

        alert("1 Ausgabe " + myJSON);
Die indents hab ich nicht angepasst, bin am Handy.
Schau dir das Scoping von let und var an. Erstens ist eine per let deklarierte Variable nur innerhalb eines Blocks gültig, zweitens würdest du sie mit erneutem let sowieso neu deklarieren.
Was du bräuchtest wäre eine Deklaration mit var myJSON = false;, danach kannst du die Variable beliebig mit myJSON = 'asdf'; überschreiben .
 
floq0r schrieb:
Was du bräuchtest wäre eine Deklaration mit var myJSON = false;
var ist Schnee von gestern, das kann (und sollte) bei let bleiben.

Es muss lediglich die Redeklaration von myJSON entfernet werden und stattdessen die vorhandene Variable genutzt werden.

Aus let myJSON = JSON.stringify(json); also myJSON = JSON.stringify(json); werden.
 
Vielen Dank für die Antworten :) Ich habe nun die myJSON per document.getElementById("json").innerHTML = myJSON; an die <span id="json"></span> übergeben.
 
Zurück
Oben