Ankündigung

Einklappen
Keine Ankündigung bisher.

Pobleme mit dem Parse eines Arrays

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Pobleme mit dem Parse eines Arrays

    Hey, ich wurde von einem Kumpel gefragt ob ich ihm bei einem Problem mit Javascript helfen könnte, also habe ich mir das ganze angeschaut. Nun bin ich aber kein Profi und hab nach langem hin und her testen leider nicht helfen können.
    Bevor mein Kumpel jetzt 50-60€ ausgibt um jemanden das ganze Programmieren zu lassen, wollte ich mal hier fragen ob man das Problem leicht gelößt bekommt.
    Ich habe das ganze mal soweit ausgebaut und habe auch schon eine Vermutung woran das liegen könnte. Das ganze ist ein Script für einen GTA Server, deshalb ist die Seite auch nicht schön, sondern einfach nur Text.

    Das Problem dabei ist, der Array wird vor dem Parse richtig zurückgegeben, nach dem Parse kommt entweder Undefined oder ein Syntax Fehler zurück, aber ich konnte es bis jetzt nicht beheben. Vielleicht hat ja einer von euch eine Idee.

    Code ist wie Folgt:
    HTML-Code:
    <!DOCTYPE html>
    <html>
    <head>
        <title>License Card Info</title>
        <meta charset="utf-8"/>
    </head>
    <body>
        <h1>License Card Info -> System Test</h1>
    
        <div id="UserLicenseCard">
            <span class="nameTitle LicenseCardTitleColor">Vor- und Nachname: </span><br/>
            <span id="UserLicenseCard-name" class="LicenseCardColor">Maximilian von Mustermann</span><br/><br/>
            <span class="birthdatetitle LicenseCardTitleColor">Geburtsdatum: </span><br/>
            <span id="UserLicenseCard-birthdate" class="LicenseCardColor">18.02.2019</span><br/><br/>
            <span class="licensenametitle LicenseCardTitleColor">Lizenz: </span><br/>
            <span id="UserLicenseCard-licensename" class="LicenseCardColor">Personenbeförderungslizenz</span><br/><br/>
            <span class="servicenumbertitle LicenseCardTitleColor">Dienstnummer: </span><br/>
            <span id="UserLicenseCard-serviceNumber" class="LicenseCardColor">22</span><br/><br/>
            <span id="UserLicenseCard-signature" class="LicenseCardColor">Maximilian von Mustermann</span><br/><br/>
            <span id="UserLicenseCard-joinInfo" class="LicenseCardColor">01.01.2020 (122)</span>
        </div>
    </body>
        <script src="https://code.jquery.com/jquery-3.6.0.slim.js" integrity="sha256-HwWONEZrpuoh951cQD1ov2HUK5zA5DwJ1DNUXaM6FsY=" crossorigin="anonymous"></script>
    
        <script type="text/javascript">
            function showLicensesCard(type, infoArray) {
                if (type != "lic" ) return;
    
                //console.log(infoArray); //Gibt den Array aus
    
                var persoHTML = "",
                    infoArray = JSON.parse(infoArray),
                    colorCode = "#fff";
    
                //console.log(infoArray); //Gibt Fehler oder Undefined aus
    
                for (var i in infoArray) {
                        $("#UserLicenseCard-name").html(`${infoArray[i].charname}`);
                        $("#UserLicenseCard-birthdate").html(`${infoArray[i].birthdate}`);
                       if(infoArray[i].LKW == true) $("#UserLicenseCard-license").html(`${infoArray[i].lkwName}`);
                       if(infoArray[i].PKW == true) $("#UserLicenseCard-license").html(`${infoArray[i].pkwName}`);
                       if(infoArray[i].Bike == true) $("#UserLicenseCard-license").html(`${infoArray[i].bikeName}`);
                       if(infoArray[i].Boat == true) $("#UserLicenseCard-license").html(`${infoArray[i].boatName}`);
                       if(infoArray[i].Fly == true) $("#UserLicenseCard-license").html(`${infoArray[i].flyName}`);
                       if(infoArray[i].Helicopter == true) $("#UserLicenseCard-license").html(`${infoArray[i].heliName}`);
                       if(infoArray[i].PassengerTransport == true) $("#UserLicenseCard-license").html(`${infoArray[i].passengerTransportName}`);
                       if(infoArray[i].Helicopter == true) $("#UserLicenseCard-license").html(`${infoArray[i].heliName}`);
                        $("#UserLicenseCard-joinInfo").html(`${infoArray[i].firstJoin} (${infoArray[i].charId})`);
                        $("#UserLicenseCard").css("background-image", `url(../utils/img/licensecard.png)`);
                        $(function() {
                            $("#UserLicenseCard").show();
                            setTimeout(() => {
                                $("#UserLicenseCard").hide("slide", {
                                    direction: "right"
                                }, 800);
                            }, 8000);
                        });
                    
                }
            }
        </script>
    
        <script type="text/javascript">
            var infoArray = [{"charId":18,"PKW":true,"pkwName":"PKW Führerschein","PKWPrice":2500,"LKW":true,"lkwName":"LKW Führerschein","LKWPrice":10000,"Bike":true,"bikeName":"Motorrad Führerschein","BikePrice":2000,"Boat":true,"boatName":"Bootsschein","BoatPrice":4500,"Fly":true,"flyName":"Flugschein","FlyPrice":12000,"Helicopter":true,"heliName":"Helikopterschein","HelicopterPrice":12000,"PassengerTransport":true,"passengerTransportName":"Personenbeförderungslizenz","PassengerTransportPrice":4000,"weaponlicense":true}];
    
            showLicensesCard('lic', infoArray);
        </script>
    </html>

  • #2
    Hallo,

    Code:
    infoArray = JSON.parse(JSON.stringify(infoArray))
    Auch hier beschrieben: https://www.stechies.com/unexpected-...on-position-1/

    charname oder birthdate ist im objekt auch nicht definiert.
    Ein Tag mit der id UserLicenseCard-license gibt es auch nicht.

    Und warum soll die UserLicenseCard nach kurzer Zeit wieder verschwinden?

    Kommentar


    • #3
      Hey,

      Erstmal Danke für deine Antwort.

      Das wie du es dort hast, hatte ich schon getestet. Funktioniert leider nicht aber durch den Link bin ich dann auf die idee gekommen das mal getrennt zu machen, so funktioniert es wohl jetzt.
      Komisch daran ist nur, dass wenn ich den Array nicht manuell hinterlege geht es nicht. Und ich finde nicht heraus warum es nicht klappt.der Array ist 1:1 gleich. Da muss ich dann mal Server Seitig schauen.

      Das charname & birthdate nicht hinterlegt sind ist mir klar, sollen noch dazu kommen.
      Den Tag hatte ich vergesen zu berichtigen, hab ich aber schon gemacht gehabt.

      Das ganze soll verschwinden, weil es ein Vorzeigen Imitiert, mach im Spiel dann sinn.

      Kommentar


      • #4
        Komisch daran ist nur, dass wenn ich den Array nicht manuell hinterlege geht es nicht. Und ich finde nicht heraus warum es nicht klappt.der Array ist 1:1 gleich. Da muss ich dann mal Server Seitig schauen.
        Vage Vermutung: Wenn Du das Array nicht manuell hinterlegst, holst Du es mit Ajax vom Server und dass ist es JSON-kodiert? In dem Fall musst Du es parsen, wenn Du es so, wie in in deinem Eingangsposting, manuell hinterlegst, darst Du es jedoch nicht parsen.

        BTW: Ich weiß nicht, ob ihr die Struktur dieses Arrays in der Hand habt, aber so wie es ist, ist sie ziemlich unglücklich. Günstiger wäre es so:
        Code:
        const infoArray = {"charId":18, "licenses": {"PKW":{"Name":"PKW Führerschein","Price":2500},"LKW":{"Name" :"LKW Führerschein","Price":10000}, /* usw. */}};
        Dann kann man die mit einer Schleife auswerten:
        Code:
        const licenses = infoArray.licenses;
        for (key in licenses) {
           $("#UserLicenseCard-license").html(licenses[key].Name);
        }
        (ungetestet)

        Kommentar


        • #5
          Zitat von Nightland Driver Beitrag anzeigen
          Da muss ich dann mal Server Seitig schauen.
          Wenn du einen Link hast können wir uns das nochmal ansehen. Dann ist es leichter den wahren Grund herauszubekommen.

          Viele Grüße

          Kommentar


          • #6
            Zitat von Testie Beitrag anzeigen
            Wenn du einen Link hast können wir uns das nochmal ansehen. Dann ist es leichter den wahren Grund herauszubekommen.
            Link könnte schwierig werde, da es sich wie bereits gesagt um einen Spiel Server handelt.

            Zitat von Sempervivum Beitrag anzeigen
            Vage Vermutung: Wenn Du das Array nicht manuell hinterlegst, holst Du es mit Ajax vom Server und dass ist es JSON-kodiert? In dem Fall musst Du es parsen, wenn Du es so, wie in in deinem Eingangsposting, manuell hinterlegst, darst Du es jedoch nicht parsen.
            Ich habe nun mal alles was mit der Erstellung in zusammenhang steht hier angepackt.

            Zitat von Sempervivum Beitrag anzeigen
            BTW: Ich weiß nicht, ob ihr die Struktur dieses Arrays in der Hand habt, aber so wie es ist, ist sie ziemlich unglücklich.
            Leider haben wir da nicht wirklich die möglichkeit den Array anders aufzubauen, außer wir legen dafür eine neue Methode an oder ändern die "GetCharacterLicenses()" dahingehend ab.

            Hier werden die Daten aus der Datenbank dann in den Array gepackt. (Das ist eine Standard funktion des Systems gewesen. Das funktioniert mit allen anderen Ausweisen, soll auch noch als 2.Array später mit in den Ausweis der nicht geht eingebunden werden.)
            Code:
            public static string GetCharacterInformations(int charId) {
                try {
                    if (charId <= 0) return "[]";
                    var items = PlayerCharacters.Where(x => x.charId == charId).Select(x => new {
                        x.charId,
                        x.charname,
                        x.birthdate,
                        x.birthplace,
                        address = $"{x.address}",
                        firstJoin = x.firstJoinTimestamp.ToString("d", CultureInfo.CreateSpecificCulture("de-DE")),
                    }).ToList();
                    return JsonConvert.SerializeObject(items);
                } catch (Exception e) {
                    Alt.Log($"{e}");
                    return "[]";
                }
            }
            Code:
            public static string GetCharacterLicenses(int charId) {
                if (charId <= 0) return "";
            
                var items = CharactersLicenses_.Where(x => x.charId == charId).Select(x => new {
                    x.charId,
                    x.PKW,
                    pkwName = "PKW Führerschein",
                    PKWPrice = GetLicensePrice("pkw"),
                    x.LKW,
                    lkwName = "LKW Führerschein",
                    LKWPrice = GetLicensePrice("lkw"),
                    x.Bike,
                    bikeName = "Motorrad Führerschein",
                    BikePrice = GetLicensePrice("bike"),
                    x.Boat,
                    boatName = "Bootsschein",
                    BoatPrice = GetLicensePrice("boat"),
                    x.Fly,
                    flyName = "Flugschein",
                    FlyPrice = GetLicensePrice("fly"),
                    x.Helicopter,
                    heliName = "Helikopterschein",
                    HelicopterPrice = GetLicensePrice("helicopter"),
                    x.PassengerTransport,
                    passengerTransportName = "Personenbeförderungslizenz",
                    PassengerTransportPrice = GetLicensePrice("passengertransport"),
                    x.weaponlicense,
                }).ToList();
            
                return JsonConvert.SerializeObject(items);
            }
            Hier wird der Array definiert, dann in der Funktion erstellt und dann an die Ausgabe funktion übergeben.
            Code:
            var data = "[]";
            data = Characters.GetCharacterInformations(charId);
            
            showLicensesCard("lic", data);
            Und die funktion Client Seitig ist diese:
            Code:
            function showLicensesCard(type, infoArray) {
                if (type != "lic" ) return;
            
                //console.log(infoArray); //Gibt den Array aus
            
                var persoHTML = "",
                    infoArray = JSON.parse(infoArray),
                    colorCode = "#fff";
            
                //console.log(infoArray); //Gibt Fehler oder Undefined aus
            
                for (var i in infoArray) {
                        $("#UserLicenseCard-name").html(`${infoArray[i].charname}`);
                        $("#UserLicenseCard-birthdate").html(`${infoArray[i].birthdate}`);
                       if(infoArray[i].LKW == true) $("#UserLicenseCard-license").html(`${infoArray[i].lkwName}`);
                       if(infoArray[i].PKW == true) $("#UserLicenseCard-license").html(`${infoArray[i].pkwName}`);
                       if(infoArray[i].Bike == true) $("#UserLicenseCard-license").html(`${infoArray[i].bikeName}`);
                       if(infoArray[i].Boat == true) $("#UserLicenseCard-license").html(`${infoArray[i].boatName}`);
                       if(infoArray[i].Fly == true) $("#UserLicenseCard-license").html(`${infoArray[i].flyName}`);
                       if(infoArray[i].Helicopter == true) $("#UserLicenseCard-license").html(`${infoArray[i].heliName}`);
                       if(infoArray[i].PassengerTransport == true) $("#UserLicenseCard-license").html(`${infoArray[i].passengerTransportName}`);
                       if(infoArray[i].Helicopter == true) $("#UserLicenseCard-license").html(`${infoArray[i].heliName}`);
                        $("#UserLicenseCard-joinInfo").html(`${infoArray[i].firstJoin} (${infoArray[i].charId})`);
                        $("#UserLicenseCard").css("background-image", `url(../utils/img/licensecard.png)`);
                        $(function() {
                            $("#UserLicenseCard").show();
                            setTimeout(() => {
                                $("#UserLicenseCard").hide("slide", {
                                    direction: "right"
                                }, 800);
                            }, 8000);
                        });
                    
                }
            }

            Kommentar


            • #7
              Da kann ich leider nicht erkennen, wie das Array vom Server an den Client gelangt.

              Kommentar


              • #8
                Das System ist generell etwas komisch, client und Serverseitig ist ein sehr relativer begriff, eigentlich ist es alles erstmal nur Server Seitig, das ganze System jetzt genau zu erklären würde mehrere Stunden dauern.
                Deswegen können wir erstmal davon ausgehen, dass alles ServerSeitig oder ClientSeitig passiert. Das macht es einfacher.

                Daher kann der Server auch die funktion beim Client aufrufen und die Daten übergeben.
                Code:
                var data = "[]";
                data = Characters.GetCharacterInformations(charId);
                
                showLicensesCard("lic", data);

                Kommentar


                • #9
                  OK, ohne es zu verstehen: Der Returnwert dieser Funktion GetCharacterInformations scheint JSON-kodiert bzw. serialisiert zu sein
                  Code:
                  return JsonConvert.SerializeObject(items);
                  Demnach scheint in showLicensesCard alles OK zu sein, denn Du parst dort das Array.
                  Gibt die Console Hinweise? Wenn nicht, ein wenig debuggen und dieses Array mit console.log ausgeben lassen, vor und nach dem Parsen.
                  Zuletzt geändert von Sempervivum; 02.08.2021, 21:44.

                  Kommentar


                  • #10
                    Konsole gibt keine Hinweise, hab den Array mal ausgeben lassen, sieht wie folgt aus:

                    Code:
                    [23:11:49] Before Parse:
                    [23:11:49] [{"charId":16,"PKW":true,"pkwName":"PKW Führerschein","PKWPrice":2500,"LKW":false,"lkwName":"LKW Führerschein","LKWPrice":10000,"Bike":false,"bikeName":"Motorrad Führerschein","BikePrice":2000,"Boat":false,"boatName":"Bootsschein","BoatPrice":4500,"Fly":false,"flyName":"Flugschein","FlyPrice":12000,"Helicopter":false,"heliName":"Helikopterschein","HelicopterPrice":12000,"PassengerTransport":false,"passengerTransportName":"Personenbeförderungslizenz","PassengerTransportPrice":4000,"weaponlicense":false}]
                    Code:
                    [23:11:49] After Parse:
                    [23:11:49] [{"charId":16,"PKW":true,"pkwName":"PKW Führerschein","PKWPrice":2500,"LKW":false,"lkwName":"LKW Führerschein","LKWPrice":10000,"Bike":false,"bikeName":"Motorrad Führerschein","BikePrice":2000,"Boat":false,"boatName":"Bootsschein","BoatPrice":4500,"Fly":false,"flyName":"Flugschein","FlyPrice":12000,"Helicopter":false,"heliName":"Helikopterschein","HelicopterPrice":12000,"PassengerTransport":false,"passengerTransportName":"Personenbeförderungslizenz","PassengerTransportPrice":4000,"weaponlicense":false}]

                    Kommentar


                    • #11
                      Leider sieht man bei diesen Ausgaben den Typ der Variablen nicht. Sieht aber eigentlich gut aus. Was funktioniert denn jetzt genau nicht?

                      Kommentar


                      • #12
                        Es wird anstatt der werte nur Undefined zurückgegeben.

                        Hier soll ja wenn wie in dem Fall der "PKW" auf "true" steht "PKW Führerschein" ausgegeben werden, aber es steht dort nur Undefined oder der Platzhalter.
                        Code:
                        if(infoArray[i].PKW == true) $("#UserLicenseCard-license").html(`${infoArray[i].pkwName}`);
                        Deswegen verzweifel ich gerade an dem Fehler, es ist alles in Ordnung, er scheint alles ordentlich auszuführen und zu machen. Sieht man ja wenn ich den Array Manuell anlege, aber dann wenn ich den vom System bekomme geht es nicht mehr.

                        Kommentar


                        • #13
                          Dann lass uns mal die Typen der Variablen mit ausgeben:
                          Code:
                                  function showLicensesCard(type, infoArray) {
                                      if (type != "lic") return;
                                      console.log(infoArray); //Gibt den Array aus
                                      console.log(typeof infoArray);
                                      var persoHTML = "",
                                          infoArray = JSON.parse(infoArray),
                                          colorCode = "#fff";
                                      console.log(infoArray); //Gibt Fehler oder Undefined aus
                                      console.log(typeof infoArray);
                                      for (var i in infoArray) {
                          // usw.

                          Kommentar


                          • #14
                            Dabei kommt dann bei Before und After "string" raus.

                            Kommentar


                            • #15
                              Zur Sicherheit mal unterschiedliche Variablennamen nehmen:
                              Code:
                                      function showLicensesCard(type, infoArrayStr) {
                                          if (type != "lic") return;
                                          console.log(infoArrayStr);
                                          console.log(typeof infoArrayStr);
                                          var persoHTML = "",
                                              infoArray = JSON.parse(infoArrayStr),
                                              colorCode = "#fff";
                                          console.log(infoArray);
                                          console.log(typeof infoArray);
                                          for (var i in infoArray) {

                              Kommentar

                              homepage-forum.de - Hilfe für Webmaster! Statistiken

                              Einklappen

                              Themen: 56.926   Beiträge: 431.129   Mitglieder: 28.692   Aktive Mitglieder: 48
                              Willkommen an unser neuestes Mitglied, Petergvc.

                              Online-Benutzer

                              Einklappen

                              218 Benutzer sind jetzt online. Registrierte Benutzer: 0, Gäste: 218.

                              Mit 3.502 Benutzern waren am 23.01.2020 um 17:20 die meisten Benutzer gleichzeitig online.

                              Die neuesten Themen

                              Einklappen

                              Die neuesten Beiträge

                              Einklappen

                              Lädt...
                              X