404 Fehler bei AJAX Request: PHP-Datei wird nicht gefunden?

2 Antworten

404 sagt die URL gibt es nicht. Daran ist nicht zu rütteln. Das passt schon so. Du musst also schauen was an der per AJAX angesprochenen URL nicht stimmt. Schau dazu am besten in der Entwicklerkonsole deines Browsers nach wohin der Request genau geht und vergleiche das mit dem eigentlichen Ziel was Du im Sinn hast.

Woher ich das weiß:Berufserfahrung
Am url-Pfad kann es nicht liegen, da habe ich bereits alles Mögliche ausprobiert.

Zumindets nicht nur am URL-Pfad. Ich würde zum Testen empfehlen, einen absoluten Pfad zu verwenden, laut inet ist die URL relativ zum Root, nicht zum derzeitigen Ordner:

https://stackoverflow.com/questions/2363511/relative-vs-absolute-urls-in-jquery-ajax-requests

man solle sich mit Werkzeugen wie Fiddler die Requests ansehen

Oder mit der Browserkonsole, das dürfte auch ausreichen. Relevant ist die angefragte Adresse. Ist diese korrekt?

Conspiratist 
Fragesteller
 13.10.2020, 10:01

Das habe ich schon versucht, dann gibt es gar keine Reaktion mehr. Als ob der Button gar nicht mehr reagieren würde. Ist das dann besser?
Tut mir leid, wenn ich dumme Fragen stelle. Ich bin JS und PHP Anfänger.

1
Destranix  13.10.2020, 10:14
@Conspiratist

In diesem Falle womöglich schon, hängt ganz vom konkreten Grund ab.

Siehst du in der Browserkonsole eine Fehlermeldung?

Wenn du der Onclick-Methode zusätzlich ein alert hinzufügst, das unbedingt ist, siehst du diesen dann?

An sich kann "Keine Reaktion" hier bedeuten, dass die Seite gefunden und aufgerufen wird, der Aufruf aber ewig dauert, was schonmal besser wäre, als ein 404er, bei dem die Seite ja garnicht erst gefunden wird.

0
Conspiratist 
Fragesteller
 13.10.2020, 10:20
@Destranix

Habe jetzt der onClick-Methode wie vorgeschlagen ein alert hinzugefügt. Es wird nicht ausgeführt.
Die Console hat mir auch einen Fehler ausgegeben, den ich nicht ganz verstehe:

Uncaught SyntaxError: Invalid hexadecimal escape sequence

  at b (jquery-3.4.1.min.js:2)

  at Ie (jquery-3.4.1.min.js:2)

  at k.fn.init.append (jquery-3.4.1.min.js:2)

  at k.fn.init.<anonymous> (jquery-3.4.1.min.js:2)

  at _ (jquery-3.4.1.min.js:2)

  at k.fn.init.html (jquery-3.4.1.min.js:2)

  at Object.<anonymous> (jquery-3.4.1.min.js:2)

  at c (jquery-3.4.1.min.js:2)

  at Object.fireWith [as resolveWith] (jquery-3.4.1.min.js:2)

  at l (jquery-3.4.1.min.js:2)

0
Conspiratist 
Fragesteller
 13.10.2020, 10:24
@Conspiratist

Außerdem steht da das DevTools die SourceMap nicht laden kann und das hier:

HTTP error: status code 404, net::ERR_HTTP_RESPONSE_CODE_FAILURE

0
Destranix  13.10.2020, 10:25
@Conspiratist

Wie sieht dein Onklick jetzt aus?

SourceMap

Ich habe keine Ahnung, welche SourceMap damit gemeints ein könnte oder sollte.

0
Conspiratist 
Fragesteller
 13.10.2020, 10:42
@Destranix

So:

$(document).on('click', '#removeButton', function(){
			alert("test")
			$.ajax({
			url: "C:\xampp\htdocs\ScrumManagerMKII2020\scrumProject\removeProject.php",
			success: function(){
				alert("Success");
			},
			error: function(jqXHR, textStatus, errorThrown) {
				alert(jqXHR.status);
				alert(textStatus);
				alert(errorThrown);
			} //error
		}) //ajax
}); //function & onClick
1
Destranix  13.10.2020, 10:44
@Conspiratist

Es muss sich um eine URL handeln. Das hier ist allerdings keine URL sondern ein Datepfad.

Entwedre machst du das mittels "file://" oder, indem du "localhost" verwendest und den Pfad relativ zu "htdocs" angibst.

localhost/ScrumManagerMKII2020/scrumProject/removeProject.php
0
Conspiratist 
Fragesteller
 13.10.2020, 10:47
@Destranix

Woops. Mein Fehler. xD

Jetzt bekomme ich dreimal "test" ausgegeben und wieder zweimal jeweils "404", "error" und "Not found"

1
Destranix  13.10.2020, 10:49
@Conspiratist

Wenn du dieselbe URL aber direkt in deinen Browser eingibst siehst du die Seite?

Wird dir in der Browserkonsole bei Klick auf den Button die Anfrage angezeigt? Evtl. musst du dort zuvor noch "XHR" aktivieren, dmait du das siehst.

Steht dort die korrekte URL?

0
regex9  13.10.2020, 11:39
@Conspiratist

Zwei Anmerkungen zu deinem PHP-Skript:

1) Du baust dir ein PDO-Objek auf, nutzt es hier:

$selectedProjectID = mysql_query($query);

aber gar nicht. Alle Funktionen, die mit mysql_ beginnen (nicht zu verwechseln mit mysqli_), solltest du übrigens vermeiden, denn sie sind veraltet / wurden in PHP 7 entfernt.

2) Wenn du wie hier:

$sql = "DELETE FROM " . TABLE_PROJECT_NAME . " WHERE " . COL_PROJECT_ID . " = " . $selectedProjectID;

try {
  $statement = $dbh->prepare($sql);
  // ...

den SQL Query mit all seinen dynamischen Werten (ID) im Vorfeld manuell zusammenbaust und an prepare übergibst, ist es derselbe Effekt, als würdest du den Query mit der query-Methode an die Datenbank schicken. Die dynamischen Werte werden nicht explizit maskiert.

Nutze stattdessen Platzhalter:

$sql = "DELETE FROM " . TABLE_PROJECT_NAME . " WHERE " . COL_PROJECT_ID . " = :selectedProjectId";

$statement = $dbh->prepare($sql);
$success = $statement->execute(array(":selectedProjectId" => $selectedProjectID));

Das Ergebnis von execute zu prüfen, sollte übrigens ausreichen. Das try-catch würde ich persönlich nicht als notwendig erachten.

1
Conspiratist 
Fragesteller
 13.10.2020, 11:57
@regex9

Danke für den Tipp. Werde ich umgehend ausprobieren.

1