This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm whether you accept or reject these cookies being set.

A cookie will be stored in your browser regardless of choice to prevent you being asked this question again. You will be able to change your cookie settings at any time using the link in the footer.

Durchsuche Foren

(Erweiterte Suche)

Foren-Statistiken
» Mitglieder: 3.815
» Neuestes Mitglied: brautmoden-bad-kissingen
» Foren-Themen: 373
» Foren-Beiträge: 1.526

Komplettstatistiken

Benutzer Online
Momentan sind 8 Benutzer online
» 0 Mitglieder
» 7 Gäste
Bing

Aktive Themen
Florian86
Express Post Abfrage

Forum: Javascript
Letzter Beitrag: Florian86
Vor 11 Stunden
» Antworten: 4
» Ansichten: 338
Oly
Fenster aktualisieren

Forum: Javascript
Letzter Beitrag: Oly
Gestern, 06:31
» Antworten: 2
» Ansichten: 199
ludwigmller
Chart.js - year independe...

Forum: Javascript
Letzter Beitrag: ludwigmller
Gestern, 05:24
» Antworten: 0
» Ansichten: 16
derDoc
Return meiner Variable

Forum: Javascript
Letzter Beitrag: derDoc
21.03.2023, 16:44
» Antworten: 0
» Ansichten: 101
Oly
addEventListener wird nic...

Forum: Javascript
Letzter Beitrag: Oly
21.03.2023, 14:47
» Antworten: 3
» Ansichten: 218
rzscout
Web-Widget erstellen, das...

Forum: Javascript
Letzter Beitrag: rzscout
20.03.2023, 19:05
» Antworten: 3
» Ansichten: 270
BastiBln
html parser elemente form...

Forum: Php
Letzter Beitrag: BastiBln
20.03.2023, 11:47
» Antworten: 5
» Ansichten: 688
rzscout
Funktion mit Array

Forum: Javascript
Letzter Beitrag: rzscout
16.03.2023, 17:30
» Antworten: 11
» Ansichten: 570
Oly
HILFEEE bekomme kein Wert...

Forum: Javascript
Letzter Beitrag: Oly
16.03.2023, 10:25
» Antworten: 0
» Ansichten: 47
admin
Canvas Download-Button

Forum: Javascript
Letzter Beitrag: admin
14.03.2023, 20:43
» Antworten: 1
» Ansichten: 116

 
  Express Post Abfrage
Geschrieben von: Florian86 - 10.03.2023, 18:58 - Forum: Javascript - Antworten (4)

Hallo Zusammen,

ich habe das Problem, dass ich bestimmte Werte in einer SAP Datenbank abfragen möchte, was auch funktioniert.
Leider muss ich jede Abfrage 2 mal durchführen um das richtige Ergebnis zu erhalten.
Nach Neuladen der Seite bekomme ich beim ersten Klick auf den Button immer undefined und beim 2. Klick erst mein Ergebnis.

Wiederhole ich das mit anderen Daten ohne die Seite neu zu laden, bekomme ich immer erst den alten abgefragten Wert und bei erneuten Klick erst die gewünschten Ergebnisse.


Frontend

'use strict';
document.getElementById("anzeige").addEventListener("click",function(){
   
    var mat = document.getElementById("mat").value
    var lgort = document.getElementById("lgort").value
    var mhd = document.getElementById("mhd").value

    var data =  {
        "material" : mat,
        "lagerort" : lgort,
        "mhd" : mhd
    };

    const options = {
        method: 'POST',
        headers:{ 'Content-Type': 'application/json' },
        body:JSON.stringify(data)
    };

postfile(options);  

});

async function postfile(options){
    const response = await fetch('/zwmbestand',options);
    const data = await response.json();

console.log(data);
}

Backend
'use strict';

var express = require('express');
var sap = require('./zbestand.js');

var router = express();

router.post('/zwmbestand',async (req,res,next) => {
                                              
    let result = await sap.bestandquery(req.body);
                                                                              
    res.send(`${result}`);
    
});

module.exports = router;

DB Abfrage sap.Bestandsquery
module.exports = {

    bestandquery : function(body){
        var dbConnection = hana.createConnection();
        
select = SQL Abfrage


        // aktuelles select auslesen
        dbConnection.connect(connOptions, async function (err) {
        if (err) console.log(err);
                var han = await dbConnection.exec(select);
                            
                datatransport = JSON.stringify(han, null, 2);
                      
        });
        dbConnection.disconnect();        
                                        
    return datatransport;
    },  

};

Grüße

Florian86



Angehängte Dateien Thumbnail(s)
   
Drucke diesen Beitrag

  Await Hell vermeiden bzw. sync function trotz await drin bauen?
Geschrieben von: bernd - 08.03.2023, 14:40 - Forum: Javascript - Keine Antworten

Hallo,
ich hoffe inständig mich kann Jemand von meinem Leiden erlösen... oder mir zumindest Rat geben :-)

Folgendes :
Ich werkle an einer Chrome Extension für eine Rouletteseite rum und es hapert am Javascriptpart.
die manifest.json und direkt extension bezogenen sachen sind nicht das Problem (bis jetzt).

Konkret habe ich einerseits einen eventlistener auf einem canvas element eingebaut.

zum anderen habe ich mittels

(function(xhr) {
    var XHR = XMLHttpRequest.prototype;
    var open = XHR.open;
    var send = XHR.send;
    var setRequestHeader = XHR.setRequestHeader;

    XHR.open = function(method, url) {
        this._method = method;
        this._url = url;
        this._requestHeaders = {};
        this._startTime = (new Date()).toISOString();

        return open.apply(this, arguments);
    };

    XHR.setRequestHeader = function(header, value) {
        this._requestHeaders[header] = value;
        return setRequestHeader.apply(this, arguments);
    };

    XHR.send = function(postData) {

...
})(XMLHttpRequest);
abgeändert, was bei Auftauchen einer XMLHttpRequest passiert.
Konkret werden darin, abhängig vom Inhalt dees Response Bodys, diverse globale Variabeln sowie Attribute mancher Objekte geändert.


Jetzt versuche ich verzweifelt, abseits davon, einen in der Theorie simplen Codeblock hinzukriegen, eine Art "Controls Setup" wie man in aus diversen games kennt:

Gegeben ein String Array.

Gehe die Elemente des Arrays der Reihe nach durch  (for loop halt)
und mache für jedes diese 3 Schritte:
1. ändere den innerText eines bestimmten divs auf das String Element ab (Damit auf der Seite sowas wie "Drücke schießen Taste" steht)
2. Warte bis ein click erfolgt.
3. nutze koordinaten des klicks, zusammen mit dem element string, um beides in einer liste zu speichern

Damit ich am Ende vom Lied eine Liste von Strings mit zugehörigen x,y koordinaten habe.
Schritt 1 ist mehr nutzerfreundlichkeit, dmait man weiß worauf man als nächstes klicken soll.

simpel in der theorie, oder?

problem nur:
ich habe keine Ahnung wie ich schritt 2 hinbekomme.
vor allem, dass javascript nicht einfach mit der näcshten iteration oder so weitermacht bevor der gerade benötgte klick reingekommen ist.
Ginge es nur drum 2 sekunden zu warten, könnte man ein await sleep() mit passender async sleep function und settimeout darin nutzen.

Aber wie wartet man bitte auf das geschehen eines clicks bzw. dass der zugehörige eventlistener abfeuert?



------------------------------------------------------------------------------------------------------------------------------------------------
Der aktuelle (Fehl?)versuch:

Ich wollte mir vom allmächtigen Chatgpt helfen lassen und habe nun folgendes gemacht:

Im click eventlistener, sowie im passenden Teil des xhr konstrukts,
werden erst die  dortigen befehle wie bisher ausgeführt und zum abschluss ein customevent  mit passendem namen gebaut und mit dispatchevent() auf den weg geschickt.
Heißt also, je nachdem was passiert (click, xhr request mit "hund" im responsebody, etc.), wird ein ganz bestimtmes customevent getriggert.


Dann habe ich noch eine neue funktion gebaut bzw. chatgpt hat gebaut:
function waitForCustomEvent(eventName) {
  return new Promise(resolve => {
    const listener = () => {
      window.removeEventListener(eventName, listener);
      resolve();
    };
    window.addEventListener(eventName, listener);
  });
}

die man aufrufen kann und die Alles anhält solange bis dieses ganz bestimmte customevent pasiert. vorher passiert nix neues mehr.


Nun sagt die Theorie dass ich bspw. sowas machen kann:
async A(){
  console.log("1");
  await waitForCustomEvent("click");
  console.log("2);
}


mit await A() sollte nun folgendes passieren:
erst wird 1 gedruckt auf die konsole.
dann sind wir am punkt wo wir einen click abwarten wollen.
dann wird also waitforcustmevent("click") ausgeführt, es wird also auf das window element ein orübergehender event listener geklatscht und gewartet bis ein click erfolgt, dann wird der eventlistener wieder entfernt.
dann wird die nächste zeile in A ausgeführt, also "2" auf die konsole gedruckt.

So sollte es in der theorie möglich sein, mitten zwischen (sync) code zeilen überall diese zeile einzubauen und der code hält dort an und läuft nicht weiter bis der click da ist. kurzum,  zwangsweise den code anhalten bis ein bestimmtes customevent reingekommen ist.
Gleiches im prinzip mit den httprequests, nur heißen dort die customevents anders.

funcktioniert das generell so?
chatgpt braucht man nicht fragen, das sagt immer "You are right, I was wrong" egal was man fragt.

Und ein daraus aber wieder resultierendes problem:
da await drin vorkommt, ist A folglich async und wir müssen wiederum await beim Aufruf von A davor packen.
Was die Funktion, die A aufruft, auch wieder async macht.

Dadurch muss ich faktisch ALLES in meinem code async machen, constructor,  funktionen ,etc. pp.

Weil halt auf Umwegen Alles Alles andere früher oder später mal aufruft.

Gibts da einen Weg das zu umgehen?

weil mir ja eigentlich nur wichtig ist, dass der code genau an den stellen anhält wo ich auf das bestimmte custom event warte.
der rest kann ja ruhig synchron laufen.

nur zwingt mich ein einzelnes await ja schon ,alles von ganz unten bis ganz oben in der funktionenaufrufhierarchie async zu machen und zu "awaiten".

chatgp konnte keine wirkliche Lösung nennen ausser "lass das await weg. dann hast du halt aber ein promise und noch keinen Wert, das du später dann doch awaiten musst". 
also keine lösung.

Kann mir bitte Jemand helfen? :-)


wie komme ich aus dem await/async zykus raus? :-(

Drucke diesen Beitrag

  Funktion um ein Bild anzuzeigen
Geschrieben von: Pilow - 08.03.2023, 13:03 - Forum: Javascript - Antworten (3)

Javascipt kann Dinge, die PHP nicht kann. Und ich kann Javascript nicht. Darum frage ich hier um Hilfe:
Ich brauche eine Funktion, die eine Abbildung so anzeigt, wie HTML es mit der Anweisung "<img class='full' src='foto.jpg'>" tun würde.
Wie sollte ich den folgenden Code ergänzen, um das zu erreichen?

<style>
img.full {
  position:   fixed;
  object-fit: contain;
  width:      calc(100% - 80px);
  height:     100%;
  }
</style>

<script>
  function picture($pic)
  {
  }
</script>

<?php
  $file="foto.jpg";
  echo "<button onclick='picture($file)'>Click</button>";
?>

Drucke diesen Beitrag

  Daten lokal speichern
Geschrieben von: Oly - 07.03.2023, 08:27 - Forum: Javascript - Antworten (6)

Hallo zusammen,

ist es bereits möglich Daten lokal auf dem Rechner zu speichern? 
Das mit localStorage finde ich soweit super und würde es verwenden, doch was ist wenn der Cache mal gelöscht wird? Alle Daten futsch, das würde ich gerne verhindern. 
Eine kleine Textdatei würde vollkommen ausreichen oder eine HTML-Datei, Excel Tabelle, Word...vollkommen wurscht.
Der Speicherort ist bekannt und der Weg über ein Input, das irgendwo hochladen wie es viele BSP zeigen, ist leider keine Option.
Hat da jemand eine Idee wie ich das umsetzen kann?

Drucke diesen Beitrag

  Allgemein Frage zu JavaScript
Geschrieben von: daggel - 06.03.2023, 11:18 - Forum: Javascript - Antworten (2)

Hallo Leute,

hab da mal eine allgemeine Frage zu JavaScrit, FireFox und Visual Studio Code.

Ich arbeite mich im Moment mit einem "Lehrbuch" in die Thematik ein und frage mich dabei oft, "Warum wird genau der selbe Code (Lösung) korrekt ausgeführt und mein erstellter Code nicht?"

Das ist jetzt schon das drittemal und nach stunden langen Abgleichen der Dokumente, gibt es keine Fehler mehr. In meinem Code stehen die selben Anweisungen und er sieht auch nicht anders aus, aber der wird nicht richtig ausgeführt. Während der Code aus Lösung problemlos funktuniert, wie er es vorgesehen ist.

Kann mir mal Jemand dazu etwas erzählen? In C und C++ gab es keine solche Probleme, da funktionierte dann auch mein Code. Und zwar auch dann, wenn er ein wenig von der Lösung abwich.

Ist JavaScipt vielleicht noch nicht so ausgegoren wie C und C++ oder woran liegt das?

Lieben Dan für Eure Antworten

daggel

Drucke diesen Beitrag

  Word Dokument öffnen und suchen
Geschrieben von: Oly - 06.03.2023, 09:03 - Forum: Javascript - Antworten (2)

Hallo zusammen,

ist es möglich ein Word-Dokument zu öffnen, Textbausteine zu suchen und zu ersetzen?
Das ganze muss nicht gespeichert werden. Möchte nur vorhandene Word-Dokumente als Vorlage nutzen und automatsch ausfüllen, anschließend ausdrucken und schließen.
Das selbe mit einer Excel-Datei.
Wäre super wenn es eine Möglichkeit gibt, habe leider nix im Netz gefunden.

Drucke diesen Beitrag

  Button nicht drucken
Geschrieben von: Oly - 04.03.2023, 15:08 - Forum: Css - Antworten (4)

Hallo zusammen,

erstelle einen Button mit

 Seite.document.write("<input type='button' id='keineAhnung' value='Print me'></input>");
ist es möglich diese Zeile so zu ändern das dieser Button nicht mit ausgedruckt wird?

oder in Javascript irgendwie?

geht nur um diesen einen Button und wollte es verhindern eine drucken.css datei zu erstellen

Drucke diesen Beitrag

  animierte Zeitleiste
Geschrieben von: Eifelkrimi - 04.03.2023, 08:27 - Forum: Javascript - Antworten (4)

Guten Morgen,

die Plattform »eifelkrimi.de« präsentiert nicht nur Bücher und Autoren, sondern auch Filme und TV-Serien, die seit den dreißiger Jahren in der Region gedreht worden sind.
Als besonderer »Eyecatcher« wird eine horizontale Zeitleiste am oberen Seitenrand auf das Jahr der Veröffentlichung bewegt - allerdings bisher noch viel zu schnell.
Beispiel: https://www.wackerberg.de/tatort/maik.php

Die Anweisung  --- document.body.style.scrollBehavior = 'smooth; --- reicht für den gewünschten Effekt offensichtlich nicht aus. Statt dessen würde ich gerne einen Parameter mit der gewünschten Zeitdauer der Bewegung einführen (z.B. 4.000 Millisekunden) und zusätzlich eine Art »ease-in-out« nutzen.

In den bestehenden Code (s.u.) soll diese Funktionalität mit ein paar Zeilen JavaScript/JQuery integriert werden. Dazu fehlen mir als absoluter Anfänger und »Nicht-Programmierer«  jedoch die Fähigkeiten.

<script type="text/javascript">
  let timelineYear = 2018
  let paddingRight = 136
  let delayForScriptToRun = 1000// ms

  const ScrollTimelineYearIntoView = (timelineYear, paddingRight) => {
    document.body.style.scrollBehavior = 'smooth;'
    let timelineDiv = document.getElementsByClassName("timelines-years")[0]
    let targetParent = document.getElementById(timelineYear)
    let targetSpan = targetParent.getElementsByTagName("span")[0];
    let getDistance = function (){ return window.innerWidth - $(targetParent).position().left - paddingRight}

    targetSpan.className="rot"
    
    timelineDiv.scrollBy({
      left: getDistance() < 0 ? -getDistance() : 0,
      behavior: 'smooth'
    });
  }

  $(document).ready(function(){
    setTimeout(ScrollTimelineYearIntoView(timelineYear, paddingRight), delayForScriptToRun);
    console.debug(`ScrollTimelineYearIntoView(${timelineYear}, ${padding}), ${delayForScriptToRun})`)
  });
</script>

Drucke diesen Beitrag

  Daten aus Website auslesen
Geschrieben von: Oly - 27.02.2023, 14:56 - Forum: Javascript - Antworten (4)

Hallo zusammen,

vielleicht hat da jemand eine schönere Lösung als ich momentan.
Als Beispiel folgendes


[Bild: 20230227145401d2b5ca33bd970f64a6301fa75ae2eb22.png]

möchte ich gerne die Zahl "7900316091" aus dem ganzen auslesen. Gibt es da eine bessere Lösung als die Meine?

Bis jetzt ermittel ich mit 

document.getElementById("invoice_data").innerText;


den Text und speicher es in einer Variable und bearbeite sie bis es passt. Geht noch.

Doch manchmal stehen mehr Werte drin und dann wird es echt mühselig.


[Bild: 20230227145401d2b5ca33bd970f64a6301fa75ae2eb22.png]


gibt es einen leichteren Wert an die Ziffer "7900316091" zu kommen als den ganzen String zu zerlegen ect. pp?

Drucke diesen Beitrag

  Canvas Download-Button
Geschrieben von: El Gordo - 27.02.2023, 09:45 - Forum: Javascript - Antworten (1)

Hallo zusammen,
ich bin ganz neu hier und auch nicht der Javascript-Profi!
Ich verzweifle gerade an meinem Script.
Ich habe mir eine html/Javascript Datei gebaut, bei dieser gibt es ein Bild (image.png) auf diesem werden per input type Namen eingegeben und mit canvas Namen auf dem Bild platziert. Es klappt auch alles ganz Prima, das Problem ist, ich habe noch einen Dowload-Button eingebaut, mit dem man das neu generierte Bild mit den Namen herunterladen können soll. Nur dieser will einfach nicht, es passiert nichts! Es wird nur Lokal auf meinem Rechner ausgeführt, es gibt keine Webseite.
Hier kommt mal mein Code HTML:

<body>
<div class="input-container">
  <h2 style="display: flex; align-items: center; justify-content: center;">Platzierungen eingeben</h2>
  
  <div class="ranking-container">
    <div class="ranking">
      <h3 style="display: flex; align-items: center; justify-content: center;">1.er</h3>
      <label>Name 1:</label>
      <input type="text" id="name1-1">
      <label>Name 2:</label>
      <input type="text" id="name1-2">
      <label>Name 3:</label>
      <input type="text" id="name1-3">
      <label>Name 4:</label>
      <input type="text" id="name1-4">
      <label>Name 5:</label>
      <input type="text" id="name1-5">
    </div>
    
    <div class="ranking">
      <h3 style="display: flex; align-items: center; justify-content: center;">2.er</h3>
      <label>Name 1:</label>
      <input type="text" id="name2-1">
      <label>Name 2:</label>
      <input type="text" id="name2-2">
      <label>Name 3:</label>
      <input type="text" id="name2-3">
      <label>Name 4:</label>
      <input type="text" id="name2-4">
      <label>Name 5:</label>
      <input type="text" id="name2-5">
    </div>
    
    <div class="ranking">
      <h3 style="display: flex; align-items: center; justify-content: center;">3.er</h3>
      <label>Name 1:</label>
      <input type="text" id="name3-1">
      <label>Name 2:</label>
      <input type="text" id="name3-2">
      <label>Name 3:</label>
      <input type="text" id="name3-3">
      <label>Name 4:</label>
      <input type="text" id="name3-4">
      <label>Name 5:</label>
      <input type="text" id="name3-5">
    </div>
  </div>
  
  <button onclick="generateNames()">Generieren</button>
</div>

	<div class="output-container">
		<canvas id="canvas"></canvas>
		<button onclick="downloadImage()">Bild herunterladen</button>
	</div>
	
	<script>
HIER ZWISCHEN STEHT DER UNTEN AUFGEFÜHRTE JAVASCRIPT-CODE
	</script>
</body>
Hier der Javascript-Teil
		function generateNames() {
			// Canvas initialisieren
			const canvas = document.getElementById('canvas');
			canvas.width = 400;
			canvas.height = 400;
			const ctx = canvas.getContext('2d');
	
			// Hintergrundbild laden
			const img = new Image();
			img.src = 'image.png';
			img.onload = function() {
				// Hintergrundbild zeichnen
				ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
		
				// Namen generieren
				const names1 = [];
				const names2 = [];
				const names3 = [];
				for (let i = 1; i <= 5; i++) {
				const name1 = document.getElementById(`name1-${i}`).value;
				if (name1) names1.push(name1);
				const name2 = document.getElementById(`name2-${i}`).value;
				if (name2) names2.push(name2);
				const name3 = document.getElementById(`name3-${i}`).value;
				if (name3) names3.push(name3);
				}
		
				// Namen auf dem Canvas zeichnen
				const fontSize = 14;
				const x1 = canvas.width / 2;
				const y1 = canvas.height / 1.2;
				const x2 = canvas.width * 0.2;
				const y2 = canvas.height / 1.2;
				const x3 = canvas.width * 0.78;
				const y3 = canvas.height / 1.23;
		
				ctx.font = `${fontSize}px Arial`;
				ctx.textAlign = 'center';
				ctx.textBaseline = 'middle';
				
				// Namen in 3D zeichnen
				ctx.font = `bold ${fontSize}px Arial`;
				ctx.textAlign = 'center';
				ctx.textBaseline = 'middle';
				ctx.fillStyle = 'white';
				ctx.shadowColor = 'black';
				ctx.shadowOffsetX = 2;
				ctx.shadowOffsetY = 2;
				ctx.shadowBlur = 2;

				// Platz 1 Namen
				ctx.fillStyle = 'gold';
				for (let i = 0; i < names1.length; i++) {
					const name = names1[i];
					const y = y1 + (i - (names1.length - 1) / 2) * fontSize;
					ctx.fillText(name, x1, y);
				}
		
				// Platz 2 Namen
				ctx.fillStyle = 'silver';
				for (let i = 0; i < names2.length; i++) {
					const name = names2[i];
					const y = y2 + i * fontSize;
					ctx.fillText(name, x2, y);
				}
		
				// Platz 3 Namen
				ctx.fillStyle = '#CD7F32';
				for (let i = 0; i < names3.length; i++) {
					const name = names3[i];
					const y = y3 + i * fontSize;
					ctx.fillText(name, x3, y);
				}
				
				// Kreiert Download
				function downloadImage() {
				  const canvas = document.getElementById('canvas');
				  const dataURL = canvas.toDataURL('image/png');
				  const link = document.createElement('a');
				  link.download = 'ranking.png';
				  link.href = dataURL;
				  document.body.appendChild(link);
				  link.click();
				  document.body.removeChild(link);
				}
			};
}

Würde mich freuen, wenn mal einer drüberschauen könnte und mir vielleicht eine Lösung geben kann.
Vielen Dank vorab, El Gordo

Drucke diesen Beitrag