Ankündigung

Einklappen
Keine Ankündigung bisher.

Variable übergeben mittels ajax

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

  • Variable übergeben mittels ajax

    Hallo zusammen!

    ich würde gerne eine JS variable an php übergeben, um auf der Basis eine Datenbankabfrage zu stellen. Noch arbeite ich local mit MAMP.
    Es geht darum dem php die Breite der Seite mitzuteilen, die mittels JS ermittelt wird.

    window.innerWidth habe ich dazu einer Variable zugewiesen, ein request erstellt und abgesendet, aber ich schaffe es nicht, dem php diese zu übergeben oder diese zu nutzen.

    Die letzten 3 Tage habe ich versucht mich durch Lösungen auf google zu wühlen, aber ich steige nicht dahinter. Besonders weil viele der Ajax-Übergaben dort auf Click-Events hin ausgeführt werden oder in etwa an dieser Stelle aufhören :/

    Es tut mir leid, wenn das eigentlich eine einfache Aufgabe ist. Ich arbeite noch nicht lange mit php und js. Es wäre super, wenn jemand hier eine Lösung hätte oder zumindest erklären kann, was passieren muss, damit das Ganze funktioniert.

    Chaser


  • #2
    Mal abgesehen davon dass es sinnvoll wäre wenn du verraten würdest was du schon versucht hast:

    Zitat von chaser Beitrag anzeigen
    Es geht darum dem php die Breite der Seite mitzuteilen, die mittels JS ermittelt wird.
    Wozu? PHP ist die (aktuell) Breite einer Seite egal, was hast du mit dem Wert vor?

    Kommentar


    • #3
      Hey tk!

      Die Seite soll ein Memory darstellen und ich möchte abhängig von der Breite der Seite unterschiedlich viele Spielpaare aus der Datenbank holen. Zusätzlich würde ich gerne die größe der Karten auf Basis des Wertes berechnen, wenn man den schon mal hat.

      Versucht habe ich folgendes:

      Code:
      var winHeight = window.innerHeight;
      var request = new XMLHttpRequest();
      
      request.open('POST','index.php',true);
      request.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
      request.send("fullheight="+winHeight);
      Ab hier bin ich nicht sicher wie es weiter geht - in den meisten Beispielen geht es weiter mit request.onreadystatechange, aber so wie ich das sehe sollte die Abfrage an dieser Stelle schon abgesendet sein und man würde damit auch im JS weiter arbeiten, nicht im php.
      Die Abfrage wird soweit ich es sehe, abgeschickt. Habe nachgeschaut und mit request.readyState == 4 && request.status == 200 einen alert auswerfen lassen, der auch angezeigt wird.
      Die Konsole zeigt keine Fehler an und die Breite wird auch berechenet und an die Variable zugewiesen.

      Wenn ich in der index.php jedoch auf $_POST['fullheight'] prüfe, kommt heraus, dass die variable nicht existiert, weshalb ich davon ausgehe, dass ein Zwischenschritt fehlt oder etwas in request.send nicht richtig angegeben ist.

      Ich hoffe damit kann man mehr abfangen

      Kommentar


      • #4
        PHP sollte sich nicht um irgendwelche Fensterbreiten kümmern müssen. Das ist doch klar ein clientseitiges Problem das auch clientseitig zu lösen ist. Also mit CSS und/oder JavaScript, aber nicht mit PHP.

        Fordere mit JavaScript genau die Daten an, die du für die Darstellung brauchst. Das ist auch der Sinn von AJAX. Das, was du da machst, hat mit dem Grundgedanken nichts zu tun.

        Und bedenke auch eine Fallback-Lösung, die ohne JavaScript funktioniert. Diese sollte in der Regel schon fertig sein, bevor überhaupt mit JavaScript begonnen wird. Dann fällt in der Regel auch die Erweiterung mit JavaScript viel einfacher und logischer.

        Kommentar


        • #5
          Naja, ich kann aber schlecht die Datenbankabfrage mit JS oder CSS stellen.

          Deshalb möchte ich die Größe des Clientfensters haben und dann dementsprechend im php die Abfragen steuern. Das ist das Größere der beiden Anliegen, weshalb ich gerne die Variable übergeben würde.

          Kommentar


          • #6
            Zitat von chaser Beitrag anzeigen
            Naja, ich kann aber schlecht die Datenbankabfrage mit JS oder CSS stellen.

            Deshalb möchte ich die Größe des Clientfensters haben und dann dementsprechend im php die Abfragen steuern. Das ist das Größere der beiden Anliegen, weshalb ich gerne die Variable übergeben würde.
            Du redest von einer Karte. Karten werden üblicherweise mit JavaScript gerendert oder als vollständiges Bild ausgeliefert.


            Beim ersteren brauchst du nur mit JavaScript die Daten aus einem Bereich abfragen. Das hat jetzt mal grundsätzlich nichts mit der Fensterbreite zu tun, denn es kommt ja z.B. auch auf die Skalierung an. Somit ist die Fensterbreite in Pixel für den Server, der die Daten liefern soll, wertlos. Wichtig für den Server ist die Information, welche Daten er liefern soll. Wie groß die Daten dann am Client dargestellt werden, interessiert ihn nicht. Pseudobeispiel mit jQuery:
            Code:
            $.getJSON('map.php', { offsetX: 0, offsetY: 0, sizeX: 200, sizeY: 100 }, function (data) {
                render_my_map(data);
            });

            Beim zweiten Fall forderst du einfach ein Bild in einer bestimmten Größe an. Zum Beispiel:
            HTML-Code:
            <img src="map.php?width=640&amp;height=480" alt="" />
            Wobei du diese Werte mit JavaScript an die Fensterbreite anpassen kannst.

            Diese Methode könnte man auch noch so erweitern, dass man nicht die Karte als ganzes lädt, sondern sogenannte Tiles, also wie Puzzlestücke. Dies hätte den Vorteil, dass man die Karte wie man es z.B. von Google Maps gewohnt ist mit der Maus herumschieben kann und einzelne Bereiche nachgeladen werden, statt jedesmal die komplette Karte neu zu laden.

            Kommentar


            • #7
              Mh, ich finde es super, dass du so ausführlich antwortest, aber da hast du etwas missverstanden. Es geht um Spielkarten bei einem Memory. Hatte oben geschrieben, dass es so ein Spiel ist.

              Bei mir liegen die Karten bzw die Infos die ich brauche in einer Datenbank, aus der per Zufall Pärchen ausgewählt und gemischt werden.

              Ein normales Memory spielt man mit 32 Karten. Das ist aber für Smartphones zu viel.
              Deshalb wäre es gut, die Breite zu haben und davon ausgehend nur 16 Karten aus der Datenbank zu holen.

              Wenn man schon dabei ist, die Breite zu übergeben dachte ich mir, kann man auch gleich die Größe der Spielkarten darüber festlegen. Mit prozentualen Werten ist die Höhe meistens ungenau, aber die Darstellung kommt für mich an zweiter Stelle. Das andere Problem ist das größere.

              Ajax bzw die Variable zu übergeben ist die einzige Lösung, die mir dafür einfällt. Falls es eine andere gibt, wäre das auch eine Option.

              Kommentar


              • #8
                Zitat von chaser Beitrag anzeigen
                ...Ein normales Memory spielt man mit 32 Karten. Das ist aber für Smartphones zu viel.
                Deshalb wäre es gut, die Breite zu haben und davon ausgehend nur 16 Karten aus der Datenbank zu holen.
                ...
                Dann prüf mit JavaScript den UserAgent des Clients, anhand dessen kannst du dann dem PHP Script mitteilen wieviel Karten du anzeigen lassen möchtest, hierbei spielt wie schon erwähnt die Breite überhaupt keine Rolle!

                Zitat von chaser Beitrag anzeigen
                ...Wenn man schon dabei ist, die Breite zu übergeben dachte ich mir, kann man auch gleich die Größe der Spielkarten darüber festlegen. . ...
                Auch das hat mit PHP absolut nichts zu tun, das ist auf der Seite des Clients zu handhaben. Stichwort: Responsive Layout.
                Je nachdem um was für einen Client es sich handelt, wird die Größe der darzustellenden Karte mittels CSS definiert.

                Kommentar


                • #9
                  Hey!

                  dabei sind wir wieder beim Ausgangsproblem, dass ich eine Information an php übergeben muss und ich das nicht schaffe.

                  Es wäre sehr nett, wenn mir jemand erklären könnte wie das geht. Ob mit dem Code oben oder mit einem anderen.

                  Kommentar


                  • #10
                    Was ist denn die index.php?
                    Und wo steht der oben gepostete js-Code drin?

                    Edit: Für AJAX-Requests würde ich ein Hilfsmittel zur Hand nehmen, z.b. jQuery. Gerade als Anfänger erleichtert das einem die Sache schon etwas.

                    Kommentar


                    • #11
                      Die index.php ist die Seite auf der alles abgebildet ist bzw die die spätere webseite erzeugt.

                      Momentan noch steht das script auch dortdrin, aber ich würde es eigentlich gerne in einem späteren schritt auslagern.
                      ist das ein Problem, wenn das script mit in der Datei steht?
                      mit jquery habe ich leider absolut keine Erfahrungen, aber das ist ähnlich, soweit ich weiß. Ich schaur mir das auch mal an.

                      Kommentar


                      • #12
                        Ja, stell Dir das so vor:

                        Schritt 1: Du fragst via Browser nach index.php
                        Schritt 2: Der Webserver führt index.php aus und schickt Deinem Browser das Resultat zurück
                        Schritt 3: Dein Browser führt den Clientseitigen Code (also javascript) aus.

                        Was du hier versuchst ist im 1.Schritt etwas zu tun was erst im Schritt 3 vorhanden ist. Das geht logischerweise nicht.

                        Übliches Vorgehen:
                        Du hast ein separates Script (nennen wir es getTiles.php), welches Dir aufgrund des Parameters die Anzahl Teile zurückliefert. An dieses Script sendest du Deinen Request per AJAX. Und erhälst von dort dann die Daten zurück. Diese Daten kannst du dann mit JavaScript weiterverarbeiten, also Dein Spiel rendern oder was immer du damit machen willst.

                        Kommentar


                        • #13
                          Funktioniert das auch anderherum?
                          also die Daten mit php weiter zu verarbeiten?

                          ich versuche es einmal mit seperaten dateien. Danke schon mal dafür!

                          Kommentar


                          • #14
                            Ne, andersrum geht das nicht. Du musst vom Client die Anfrage an ein separates (serverseitiges-)Script senden.

                            Kommentar


                            • #15
                              Zitat von chaser Beitrag anzeigen
                              Ein normales Memory spielt man mit 32 Karten. Das ist aber für Smartphones zu viel.
                              Deshalb wäre es gut, die Breite zu haben und davon ausgehend nur 16 Karten aus der Datenbank zu holen.
                              Dann verlang vom Server abhängig von der Fensterbreite entweder 32 oder 16 Karten. Aber wozu braucht der Server die Fensterbreite wissen? Die ist für ihn irrelevant. Was er wissen muss ist, wieviele Karten er ausliefern soll. Also die Zahl 16 oder 32.

                              Zitat von chaser Beitrag anzeigen
                              Ajax bzw die Variable zu übergeben ist die einzige Lösung, die mir dafür einfällt. Falls es eine andere gibt, wäre das auch eine Option.
                              Dann frage doch einfach nur die Karten ab. Im Idealfall liefert der Server die Karten als JSON-Format zurück und du musst sie nur noch mit JavaScript darstellen.

                              Kommentar

                              Lädt...
                              X