2014-06-23 14 views
6

Ich verwende Ajax, um meine Formulardaten und Dateien zur Verarbeitung in eine PHP-Datei zu übergeben.Jquery Ajax zurück 404 nicht gefunden

Javascript:

$("form#applyform").submit(function(){ 

var data = new FormData(); 
jQuery.each($('#file')[0].files, function(i, file) { 
    data.append('file-'+i, file); 
}); 

$.ajax({ 
    url: 'ValidateApplication.php', 
    data: data, 
    cache: false, 
    contentType: false, 
    processData: false, 
    type: 'POST', 
    success: function(data){ 
     alert(data); 
    } 
}); 

} 

ValidateApplication.php besteht auf jeden Fall. Ich kann es anzeigen, wenn ich die Adresse in den Webbrowser eintippe, aber wenn ich das Formular übergebe, gibt die Chrome-Konsole 404 zurück.

Die PHP befindet sich im selben Ordner wie die HTML-Seite, auf der das JavaScript läuft, daher bin ich verwirrt , warum ich eine 404.

UPDATE

POST Ändern des 404-Fehler wird, um loszuwerden, gibt aber einen 500 Internal Server error erhalte

UPDATE 2

Ändern der Wirkung von die Form zu = "Vali dateApplication.php "und das Senden als normal (ohne AJAX) führt zu der korrekten Datei ohne Fehler.

+0

Ordnerstruktur bitte – mithunsatheesh

+6

Ist Ihre Großschreibung korrekt? Bestimmte Betriebssysteme/Webserver behandeln die Großschreibung unterschiedlich. (d. h. "ValidateApplication.php" ist nicht dasselbe wie "validateapplication.php" oder "Validateapplication.php") – esqew

+0

Wie funktioniert die vollständige URL im Webbrowser? Und hast du versucht, die vollständige URL zu setzen und nicht nur die 'ValidateApplication.php', wie du sie gepostet hast? – JakeGould

Antwort

2

Es schien ein Problem mit dem FormData Objekt zu sein. Sobald ich meine Methode änderte, um stattdessen .serialize() zu verwenden, funktionierte die Seite gut.

$("form#applyform").submit(function(){ 

    var data = $("form#applyform").serialize(); 
    jQuery.each($('#file')[0].files, function(i, file) { 
     data.append('file-'+i, file); 
    }); 

    $.ajax({ 
     url: 'ValidateApplication.php', 
     data: data, 
     cache: false, 
     contentType: false, 
     processData: false, 
     type: 'POST', 
     success: function(data){ 
      alert(data); 
     } 
    }); 
} 
+0

Sind Sie sicher, dass Sie es richtig geschrieben haben? Ergebnis der Anwendung von 'serialize' ist nicht etwas, das' append'-Methode hat! – Alexander

0

Try a/vor dem Dateinamen hinzufügen: url: '/ValidateApplication.php',

Versuchen Sie, den Anforderungstyp von POST Wechsel zu bekommen und sehen, ob es funktioniert.

Versuch Teile des Codes zu kommentieren out:

/*cache: false, 
contentType: false, 
processData: false,*/ 

einen anderen Browser probieren.

+0

Das/vor dem Dateinamen führt dazu, dass das Stammverzeichnis verwendet wird, das nicht funktioniert. (Geht zu http: //localhost/ValidateApplication.php statt http: //localhost/Scope%20Website/ValidateApplication.php wo sich die Datei befindet). –

+0

Ändern in GET funktioniert, aber führt zu Error 500 Interner Server Fehler –

+0

Kommentieren dieser Linien verursacht Illegal Invocation Fehler –

2

Ich habe das gleiche Problem hatte und nach 2 Stunden auf der Suche nach was die 404 verursacht wurde ich nicht gefunden Fehler festgestellt, dass ich vor kurzem mit dem header() von PHP spielte und hatte die folgende Codezeile löschen vergessen :

header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found"); 

Nach dem Löschen wurden meine Ajax-Funktionen wieder normal.

+1

Ich habe 4 Stunden gebraucht, bis ich deinen Posten gefunden habe. Vielen Dank! –