Warning: ... Access denied for user "@'localhost' (using password: NO)
Diese Fehlermeldung hilft mehr, als man ihr auf dem ersten Blick ansieht.
Man kann zum einen sehen, dass der Zugriffsversuch vom Host localhost kommt.
Weiterhin sieht man, dass kein Benutzername angegeben ist (ein sogenannter anonymer Benutzer)
Man sieht, dass kein Passwort verwendet wurde.
In dieser Kombination ist in MariaDB kein Zugriff auf die von dir verwendete Datenbank definiert.
Nun wirst du aller Voraussicht nach nicht selbst auf die Idee gekommen sein, keinen Benutzernamen anzugeben und das ist mit Sicherheit so auch nicht in deinem Script hinterlegt.
Das liegt daran, dass MariaDB versucht, bei mehr als einem passenden Benutzerkonto für einen Zugriff den wahrscheinlichsten/konkretesten auszuwählen. Insgesamt gibt es 8 Prioritätsstufen, um es zu vereinfachen erkläre ich es an Hand der 4 wichtigsten.
Ein Benutzername kann entweder konkret oder anonym sein, dasselbe gilt für den Hostanteil.
Für MariaDB ist der Host konkreter als der Benutzer, daraus ergibt sich folgende Prioritäten:
'
root'@'localhost' => konkreter Benutzer und konkreter Host
''@'localhost' => anonymer Benutzer und konkreter Host
'
root'@% => konkreter Benutzer, anonymer Host
''@% => anonymer Benutzer und anonymer Host
In deinem Fall wurde ein Benutzer der zweiten Kategorie gewählt, weil du wahrscheinlich einen Benutzer mit anonymen Hostanteil (dritte Kategorie) verwenden wolltest. Die Grundinstallation von XAMPP enthält aber einen sehr eingeschränkten Benutzer der zweiten Kategorie (wird in XAMPP als Any@localhost angezeigt.
Du hast nun zwei Möglichkeiten: Entweder bearbeitest du deinen Benutzer dahingehend, dass der Hostanteil localhost entspricht (wie gesagt brauchst du bei AJAX keinen Remote Benutzer). Oder du löschst den vordefinierten anonymen Benutzer der mit XAMPP zu Testzwecken mitgeliefert wurde.