Ajax request von MariaDB Datenbank

Woodz

Lieutenant
Registriert
Apr. 2009
Beiträge
719
Hallo.

Ich bin ein wenig am verzweifeln und als letzte Hoffnung wollte ich mein Problem hier mal kurz schildern.

Ich möchte in einem JavaScript file mittels Ajax und php einen Datenbankabruf machen. Dabei soll das Ergebnis der Datenbankabfrage als json geparst werden:
  • Als Webserver nutze ich nginx
  • Datenban: MariaDB
  • php ist installiert:
php -v liefert:
Code:
PHP 8.3.22 (cli) (built: Jun  9 2025 14:03:36) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.3.22, Copyright (c) Zend Technologies
    with Zend OPcache v8.3.22, Copyright (c), by Zend Technologies


Hier ist der wesentliche Inhalt meiner Javascript Datei:

Javascript:
let ajax = new XMLHttpRequest();
let method = "GET";
let url = '../php/test.php';
let asynchronous = true;
           
ajax.open(method, url, asynchronous);
ajax.send();
ajax.onreadystatechange = function(){

    if (this.readyState == 4 && this.status == 200){

        let data = JSON.parse(this.responseText);
                       
        if (data.length != 0){
            console.log(data);
        else{
            console.log('Abfrage leer');
        }
    else{
        console.log(this.status, this.readyState);
    }

Hier der Inhalt der "test.php":

PHP:
<?php

$pdo = new PDO('mysql: host=localhost;dbname=dbNAME;charset=utf8', 'USER', 'PWD');

$statement = $pdo->prepare("SELECT * FROM Tabelle;");

$statement.execute();

$results = $statement->fetchAll(\PDO::FETCH_ASSOC);

echo json_encode($results);
?>


Das Problem ist nun, dass ich zwar einen Statuscode 200 bei dem Request erhalte, aber der readyState Code = 2 ist.
Wenn ich mir den Output von this.responseText anschaue, dann erhalte ich nur den Inhalt der test.php Datei.

Ich hab es im php-file statt mit "PDO()" auch mit mysqli() versucht - gleiches Ergebnis.

Könnte das Problem in der Ausführbarkeit von PHP files liegen? Scheinbar wird ja nur das php-file geöffnet, aber der Inhalt nicht ausgeführt.

Beste Grüße
 
Du hast nginx auch konfiguriert? Also dass er PHP ausgeführt?
 
  • Gefällt mir
Reaktionen: Alter_Falter, Der Lord und madmax2010
Das wird wohl das Problem sein. Sehr wahrscheinlich nicht. Für mich ist es der erste Kontakt mit nginx. Ok, dass mache ich dann wohl im /etc/.../sites-available Verzeichnis, oder?
 
Nginx ist im wesentlichen ein Proxy, leitet also nur Request weiter, in etwa an einen Apache.

Was Du vermutlich in Zeile 3 des Javascript machst ist lediglich eine lokale Datei aufrufen abfragen, das könnte auch eine Datei ohne Inhalt oder mit Nonsens drin sein; ich gehe mal stark davon aus, das eine xy.txt als url genau das gleiche liefert .. ein HTTP-Code 200 .. oder 404, wenn die Datei nicht da ist (HTTP not found).
Was aber gehen sollte ist php test.php dann (vermutung) interprtiert php die Datei. als Php Code.
Due benötigst wohl einen wirklichen Webserver, der PHP kann und dessen URL muss im Javascript konfiguriert werden, also
let url ="http://localhost/test.php"
Deine Vermutung, das es an der "Ausfürhbarkeit von PHP Files" liegt, würde ich auch so sehen.
Ergänzung ()

Wenn Dein Setup ein Javscript ausführen soll, was eine URL abfragt, ist es dem JavaScript ziemlich egal, ob er nun eine PHP Seite oder was anders abfragt .. die Instanz, die abgefragt wird muss das können.
Ich denke, ein lokales Setup wäre ehr in dieser Richtung angedacht: https://laragon.org/
Ergänzung ()

XAMPP wäre so ein PHP-Webserver
https://www.apachefriends.org/de/index.html

Antwort überarbeitete weil auf dem völlig falschen Pferd .. (sorry)
 
Zuletzt bearbeitet:
ja, mit Apache war das auch kein Problem. Ist halt jetzt nur blöd, dass es unter nginx solche Problem gibt.
 
Selbstverständlich ist nginx ein vollwertiger Webserver. Gibt zuhauf Anleitungen wie man nginx mit php aufsetzt. Apache ist definitiv nicht notwendig.

PHP-FPM installieren und in der nginx config hinterlegen. Dann wird auch php interpretiert.

Hier einige Beispiele.
 
  • Gefällt mir
Reaktionen: Marco01_809 und nkler
@Der Lord Der Meinung bzgl. nginx bin ich eigentlich auch.


Lösung zu meinem Problem:
  1. PHP-FPM war bei mir schon eingerichtet.
  2. in der Datei: /etc/nginx/conf.d/<"eure konfigurationsdatei".conf> folgende Einträge hinzufügen:
    Code:
    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
Bitte achtet darauf, die bei euch installierte php-Version (Zeile 3) anzugeben. Bei mir ist es die 8.3.

Nach den Änderungen noch schnell:
Code:
sudo nginx -t

sudo systemctl reload nginx

Unter:
Code:
/var/log/nginx/error.log
findet ihr die error-Logdatei von nginx.

Beste Grüße und danke an alle Beteiligten.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Marco01_809
Zurück
Oben