ajax / php problemm

  • Hi,


    ich bin neu hier und muss gleich eine frage loswerden... peinlich....


    ich habe eine Anwendung die durch klick eines Buttons eine php seite per ajax aufruft und return false nutzt so das die seite nicht neu geladen wird.

    die php datei wird auch ausgeführt doch leider nicht richtig.



    echo"

    test

    <script>

    $(\"#blick_feld1\").html (\"<img src='".$gr."1_".$x1.".png' $hell draggable='false'>\");

    $(\"#blick_feld2\").html (\"<img src='".$gr."2_".$x2.".png' $hell draggable='false'>\");

    $(\"#blick_feld3\").html (\"<img src='".$gr."3_".$x3.".png' $hell draggable='false'>\");

    $(\"#blick_feld4\").html (\"<img src='".$gr."4_".$x4.".png' $hell draggable='false'>\");

    $(\"#blick_feld5\").html (\"<img src='".$gr."5_".$x5.".png' $hell draggable='false'>\");

    $(\"#blick_feld6\").html (\"<img src='".$gr."6_".$x6.".png' $hell draggable='false'>\");

    $(\"#blick_feld7\").html (\"<img src='".$gr."7_".$x7.".png' $hell draggable='false'>\");

    $(\"#blick_feld8\").html (\"<img src='".$gr."8_".$x8.".png' $hell draggable='false'>\");

    $(\"#blick_feld9\").html (\"<img src='".$gr."9_".$x9.".png' $hell draggable='false'>\");

    </script>

    alles ausgegeben

    ";


    gibt nur folgendes aus: test alles ausgegeben die ajax anweisung tauchen nicht auf und werden auch nicht ausgeführt , wo ran kann es liegen ?

  • Du möchtest jetzt das die Echoausgabe richtig in Browser ankommt?

    Oder noch irgendwas?


    Und Ajax Anweisungen sehe ich nicht, da solltest du noch mehr Input geben.

    Was steht den in $hell drinnen `?


    Vielleicht erklärst du mal was du genau machen möchtest, ich denke das es anders einfacher gehen würde

  • Hi,

    ahm sorry etwas undeutlich sagst du, klar kannst ja nicht in meine Gedanken eindringen , sorry.


    Also ich habe ein Bild aus mehren Teilen ( ein Dungeon ) dort soll man sich bewegen können also klickt man auf Vorwärts.

    Danach wird das ganze Bild neu ausgegeben, das ist mir zu hässlich also baue ich es um und möchte das Script bewegen.php ausführen lassen das klappt auch er geht nur die ausgabe klappt nicht. Nach f5 kann ich mich an der neuen stelle sehen.

    Die Felder einfach neu ausgeben kann ich ja aber mit jquery ? Dachte das es mit dem Befehl gehen würde,wie bei dem ersten Mal macht er was er soll dann ist er Fertig mit der Seite und ich darf Vorwärts klicken dann geht er ( ohne ausgabe ) im anwort teil des F12 debug( Browser) kommen ja die Texte an, ausser der Bereich wo Script steht.

    Von Hand die Bilder tauschen klappt , aber im Script geht es irgendwie nicht.

    Es wird beim erstenmal ( Aufbau der Seite ) eine Routine benutzt die beim bewegen nochmals aufgerufen werden soll, dort kommt der wichtige teil nicht an oder er versteht es nicht ??? da bin ich am ende mit meinem wissen.


    ps. in hell steht zur zeit nix drinne soll später aber ein abdunkel efekt rein als wenn es dunkel geworden ist.

    bild1.pnghoffe das verdeutlicht was ich vorhabe.


    danke im voraus

  • Es ist immer fehleranfällig, wenn Du Javascript mit Ajax lädst. Ob es überhaupt ausgeführt wird, hängt davon ab, wie Du die Ausgaben des PHP-Skripts verarbeitest. Aber ich empfehle, dort gar nicht erst einzusteigen sondern nur die Variablen mit Ajax zu holen und das HTML im Browser zu generieren. Also PHP-Skript so:

    Code
    1. // Ass. Array mit den Variablen vorbereiten und JSON-kodiert ausgeben:
    2. $vars = ['gr' => $gr, 'x' => [$x1, $x2, /* usw. bis: */ $x9], hell' => $hell];
    3. echo json_encode($vars);

    Und dann so verarbeiten:

    Ungetestet

  • So in etwa verstehe ich schon was das ist , bzw. was du da erstellen möchtest.

    Ich verstehe das so.

    Du klickst auf den Buttons ,oder Pfeiltasten und bewegst dich dann in den Bild weiter.

    Bei jeden klick, bekommst du ein neues Bild angezeigt.

    Sind das 9 Einzelbilder, die dann ein großes Bild ergeben?

    Hast du mal ein Link zu der Seite, oder kannst den kompletten Code zeigen?


    Wenn ich das jetzt richtig verstanden habe, würde ich das anders machen.

    Ich denke mal das bei jeden klick neue Bilder angezeigt werden müssen.

    Dazu würde ich Ajax nehmen.

    Das holt nicht die Bilder, sondern nur den Inhalt von $gr $x6.

    Das würde ich dann in einer JSON Datei speichern.(so sollte dann ein Minimum von Datentransfer entstehen).

    Die JSON Datei wird von JS gelesen was die Links zu den Bildern zusammensetzt und den Inhalt der SRC Attributen wechselt.

    Alles andere sollte beim Aufruf der Seite schon vorhanden sein.


    Vielleicht bin ich auf den falschen weg , dazu müsste ich mal den Rest Code sehen , was der genau macht und wie du es zurzeit gemacht hast.

  • Ok hat sich erledigt, wahr zu langsam beim Schreiben.

    EDIT:

    Wie kommen eigentlich deine Tastenbefehle zu den PHP Script?

    Da musst du ja auch schon Ajax oder so benutzen?

    Das könntest du dann vielleicht in ein Request machen, senden und empfangen.


    Dein PHP Script würde mich mal Interessieren.

    Sowas könnte man auch nur mit Javascript erstellen.

    Dieser Beitrag wurde bereits 1 Mal editiert, zuletzt von basti1012 ()

  • seite ist unter gsbfun.de zusehen

    habe dir mal einen account angelegt ist aber noch in atbeit fehlt vieles , anderes muss noch umgeändert werden da diese refresh echt nerven.

    Email: basti@nix.de pw:12345678


    eigendlich dachte ich das folgendes richtig wäre:

    echo"<script>$(\"#div_bag20\").html (\"<div class=zielzone><img id='draggable' src=grafik/images/items/goldtaler.png alt='' width=32 height=32 >\");</script></div>";

    in der php datei zum anzeigen der seite geht es wird das bag20 feld mit neuen inhalt gesetzt


    wenn ich genau sowas aber in einer aufgerufener datei machr z.b wenn er klickt dann geht dier befehl nicht mehr.

    aber schaue es dir mal an!


    ansonsten gut nächtle

  • Oh.

    Soll ich ehrlich sein, oder es schön reden?


    Du lädst bei jeden klick der Pfeiltasten die ganze Seite neu.

    Das ist da voll da neben.


    Sempervivum hat in seinen Beitrag schon ein Script erstellt, was die ganzen Seiten neuladerei unnötig macht.


    Was soll diese Einbinderei?

    Code
    1. <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
    2. <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script>
    3. <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
    4. <script>window.jQuery || document.write('<script src="../../assets/js/vendor/jquery.min.js"><\/script>')</script>

    Das sollte reichen

    Code
    1. https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js

    Dein HTML hat über 300 Fehler, das ist zu viel.

    Warum hast du 2-mal dieses Bedienfeld eingebaut?


    Kurz gesagt. So ist es Mist.

    Sempervivum hat dir den richtigen Weg schon gepostet.


    Kannst du uns mal den Inhalt der Dateien posten (PHP)


    https://gsbfun.de/rucksackschreiben.php

    https://gsbfun.de/action/bewegen.php

    https://gsbfun.de/main.php


    Deine Felder mit den 6x8 Quadraten könnte man mit GRID erstellen.

    Damit verschwindet der ganze Inline Style Mist , mit den festen Positionswerten.


    Grid und fetch Api sind nicht meine Themen.

    Ich gebe mal an Sempervivum weiter, vielleicht hat er da eine Idee für nee schnelle Hilfe.


    Ich hätte jetzt gesagt das man sich erst die PHP Dateien anschaut , ob es auch anders geht, oder ohne Php.

    Wo hast du das Script weg? Hast du das selber erstellt (HTML, JS,PHP und JS Dateien)

    Dieser Beitrag wurde bereits 1 Mal editiert, zuletzt von basti1012 ()

  • hi ,

    sorry das wird mein erstes voll asyncroes projekt werden und es soll später ohne vollständiges neuladen arbeiten.

    das doppelte ist noch das alte ist nur wegen testzwecke noch drinne.

    problemm ist ( ich glaube hier kommen die missverständnisse ) das ich alles ausgebe ( nur leere divs ) dann lasse ich diese neu berechnen und ausgeben beim erstenmal klappt das vorzüglich. dann ist die ausgabe fertig und ich möchte auf user eingaben reagieren. also user klickt vorwärts dann soll der schritt verechnet werden ( das klappt ja auch ) und nur die bilder 1-9 neu ausgegeben (das selbe mache ich ja auch beim ersten mal schon )

    wenn ich in meinem kopf alles richtig habe frage ich mich warum das nicht klappt ?

    kann es asyncornes script nicht auf den kramm zugreifen wie ich das so mache ?

    okay ich mach mal einen test ...

    so hab was gefunden.. aber verstehe nicht warum er das script nicht ausführt !

    im f12-debuger ist normalerweise kompakte ansicht an, schaltet man die aus kommt das script zum vorschein.. nur leider wird es nicht ausgeführt.

    war das nicht etwas das man wenn teilweise script in der anweisung ist der aufruf geändert werden muss ?

    mal lesen


    danke schon mal im voraus und für eure gedult

  • Wenn du eine Taste drückst, kannst du ein Ajax Request ausführen und gleichzeitig die neuen Bilder zurückschicken lassen.

    Das ist eigentlich kein Problem.

    Deswegen frage ich nach den PHP Code.

    Dann kann man vielleicht auch verstehen, was die anderen Buttons machen sollen und so weiter.

    Außerdem muss de PHP Code geändert werden damit das Script von Sempervivum läuft.

    Bevor du fragst,

    Nein es geht nicht anders. Bzw. nicht sinnvoll anders.

    Mit Den Script wird das Spiel flüssiger laufen , weil es weniger Datentransfer hat und nicht bei jeden Tastendruck die ganze Seite neu geladen werden muss




    Dann könnte man auch mal schauen, ob man die Seite komplett anders oder neu machen kann

    Dieser Beitrag wurde bereits 1 Mal editiert, zuletzt von basti1012 ()

  • Zitat

    Ich gebe mal an Sempervivum weiter, vielleicht hat er da eine Idee für nee schnelle Hilfe.

    Das ist gut gemeint Basti aber der TO ignoriert konsequent meine Beiträge: Das Javascript aus seinem Eingangsposting finde ich 1-zu-1 in der Seite wieder, die er online hat.

    Zitat

    das doppelte ist noch das alte ist nur wegen testzwecke noch drinne.

    Auf diese Weise wird das nichts, da blickt doch keiner mehr durch.

  • Ja, das kann ich verstehen.

    Ich habe das mal nachgebaut und versucht mit der fetch API hinzubekommen.

    Das hatte auf der schnelle nicht geklappt , da muss ich mich noch einlesen, hatte mit der fetch API noch nicht gearbeitet.

    Habe dann jQuery Ajax genutzt und habe es hinbekommen.

    Da ich noch nicht ganz verstanden habe wie die 9 Bilder berechnet werden , gebe ich im PHP Script 9 Zufallsbilder zurück.

    Mir ist aufgefallen, ob man das so macht

    Code
    1. for (let i = 0; i < 9; i++) {
    2. document.getElementById('blick_feld' + (i + 1))
    3. .innerHTML = '<img src="' + gr + (i + 1) + '_' + x[i] + '.png" '
    4. + hell + ' draggable="false">';
    5. }


    oder so

    Code
    1. for (let i = 0; i < 9; i++) {
    2. document.getElementById('blick_feld' + (i + 1))
    3. .src='images/' + json_back[i].gr + '_' + json_back[i].x + '.png';
    4. }


    Das der Austausch etwas ruckelt.

    Gibt es eine Idee, das man die Bilder erst vorlädt oder so, und dann tauscht?


    Hat die fetch API eigentlich Vorteile gegenüber JQuery Ajax?

  • Zitat
    • Hat die fetch API eigentlich Vorteile gegenüber JQuery Ajax?

    Sie hat den Vorteil, dass sie kein jQuery braucht aber auch Nachteile:

    • Parameterübergabe etwas kryptisch
    • Unterstützt keine Fortschrittsanzeige beim Hochladen

    Dieser Beitrag wurde bereits 1 Mal editiert, zuletzt von Sempervivum ()

  • Was den Code betrifft, ist die zweite Lösung IMO schöner weil man nicht den Umweg über das HTML gehen muss. War mir auch schon eingefallen aber wenn der TO kein Interesse hat ...

  • hi sorry das ich erst heute schreibe, war nicht da.

    also ich habe zwar alles gelesen und versuche ur eit erstmal u verstehen was da so passiert.

    ich denke ich mache irgendwie einen dicken denkfehler.

    mal nach eurem wunsch die dateien die glaube ich wichtig sind


    bewegen.txt hier bewegt man sich , leider erst bei neuladen sichtbar


    main.txt hier das grundgerüst wie es war


    seite.txt hier die seite um ausgeben hauptsach soll es dummys werden die gefüllt werden.

    functions.txt die functionen sind dann hier zu finden


    ich hoffe das mein aufbau durch euch noch zu verstehen ist.

    ich weiß das ich noch garnix optemiert habe und alles einzeld ausgebe, nicht in schleifen etc das wollte ich machen wenn ich verstanden habe wie es geht.


    sorry nochmals das ich durch das asyncron noch nicht richtig durch steige. es ist noch recht neu, per jquery habe das sonst immer dircet im dom gemacht dawar dann immer das prob das jeder bowser es etwas anderes möchte, dadurch war es schwer es allen recht zu machen. dachte sowäre es in zukunft einfacher.


    trotzdem herzlichen dank für eure geduldt mit mir.

    mfg

  • Das mit den Bildern vorladen habe ich hinbekommen und sieht ganz gut aus.

    Richtig würde man das erst sehen wenn die Bilder sehr groß wären.


    Habe jetzt Stundenlang versucht das mit der fetch API zumachen ,und endlich mal ein Ergebnis bekommen was klappt.

    Glaube aber das da irgendwas falsch ist , weil habe sicherlich 20 verschiedene Möglichkeiten im Netz ausprobiert und keine hat richtig funktioniert.

    Mein AJAX Jquery sag vorher so aus.

    Mit der fetch habe ich nur diese Version zum Laufen bekommnen.

    Ist das überhaupt der richtige Weg?

  • Wie ich schon schrieb, ist die Sache mit den Parametern bei fetch etwas undurchsichtig, da ist eigentlich jQuery.ajax besser. Ich habe das vor einiger Zeit mal ausgelotet und bin zu diesen Ergebnissen gekommen:


    1. POST-Parameter selbst zusammen gebaut:

    2. POST-Parameter aus Formular:

    Bei diesen beiden liegen die Parameter dann im PHP wie gewohnt unter $_POST vor.


    3. Parameter als JSON im Body:

    Dann funktioniert das Auslesen der Parameter im PHP so:

    Code
    1. $params = json_decode(file_get_contents("php://input"));

    Also etwa anders als gewohnt :-)

  • moin.

    hmm alles gesichtet meine seite etwas überarbeitet,

    nun noch immer das pronlem

    ajax ruft bewegen auf. dort wird auch alles richtig bearbeitet / ergebniss ist in der datenbank.

    nun soll ja am ende eine funktion die sichtvelder (blick_feld1-9 ) ersetzen mit den richtigen.

    hier klappt es nicht obwohl richtige antwort kommt.



    Ich dachte es müsste klappen da wenn ich selbriges in den footer schreibe arbeitet es 100%

    wenn ich hingegen es in bewegen schreibe passiert nix.

    frage:

    kann es sein das script zwar auf die seite ausgegeben wird aber nicht ausgeführt wird , oder hat die antwort eine andere Seite somit nicht im dom in der selben adresse vorliegt ?

    bekomme auch immer komische fehler die ich nicht verstehen kann:

    Fehler beim Laden des lesbareren Quelltexts: request failed with status 404
    Adresse des lesbareren Quelltexts: <unknown>


    diesen fehler bekomme ich immer wenn ich mich bewege.


    hoffendlich könnt ihr mir helfen !

  • Zitat

    hoffendlich könnt ihr mir helfen !

    Sicher können wir das aber das Problem liegt bei dir denn Du ignorierst alle zielführenden Hinweise, die dir gegeben werden. Das Javascript, das Du gerade gepostet hast ist 1-zu-1 das, was Du am Anfang gepostet hast. So wird das nichts!