$_POST ist nicht in ajax form submit?
Wenn ich versuche zu überprüfen Benutzereingaben name ist bereits vorhanden per ajax Formular Absenden !Aber es bekommen nur Undefined index: username
im sessions.php
,was fehlt ?
<form action="" method="POST" id="saveuser" enctype="multipart/form-data">
<input type="text" name="username"><br>
<input type="password" name="pass"><br>
<input type="file" name="fileupload"><br>
<input type="submit" name="submit" value="Confirm" id="confirm">
</form>
<script type="text/javascript">
$('#confirm').click(function(e){
e.preventDefault();
$.ajax({
type:'POST',
url :"sessions.php",
data:$("#saveuser").serialize(),
contentType : false,
processData: false,
success: function(d){
console.log(d);//[error] :Undefined index: username
}
});
});
</script>
sessions.php
<?php
$exist = "david";
if($_POST['username'] == $exist){
echo json_encode("Already exist");
}
else{
echo json_encode("You can succesfully add");
}
?>
- schreiben print_r($_POST); in session.php und hast du username in das array?
- Ist die Form, die Sie haben, ist auf der gleichen Seite
- Ich habe leere Arrays ,aber in der Registerkarte "Netzwerk" sehen kann ich meine Parameter ! @Kaushalshah
- es bedeutet, dass Ihre form Wert nicht richtig Geschrieben.
- Ja, es hat! Aber keine details, die Erklärung über die Verwendung contentType :false @Yvette
- Die form wird mit einem Datei-upload Feld & auch
enctype="multipart/form-data"
die verursachen könnten die zu verarbeitenden Daten in einer anderen Art und Weise.Zusätzlich wird die Datei-upload-Feld nicht sinnvoll, weil es die Datei nicht hochgeladen werden, mit Ihren aktuellen code ein. - Hallo David, ich war der Versuch einer Antwort auf deine JS Frage... Vermeiden, indem Sie nicht alles, um die im browser localStorage, das window-Objekt, cookies, etc... Hier ist gut zu Lesen für Euch javascript.crockford.com/private.html & ein Weiteres: developer.mozilla.org/en-US/Add-ons/SDK/Guides/...
- Vielen Dank @admcfajn
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es ein paar Probleme mit Ihrem code, wie:
Das problem ist, weil der folgenden zwei Zeilen,
Vom die Dokumentation,
und
Daher
$_POST
array wäre leer sessions.php Seite, wenn SiecontentType
undprocessData
zufalse
, und das ist, warum Sie immer diese undefined index: username Fehler. Aber gesagt haben, dass, seit Sie senden eine Datei mit deinem AJAX-request, es ist okay, um diese Einstellungen zu setzen, wiefalse
, das weiter ist, erfahren Sie im folgenden Punkt..serialize()
Methode erzeugt eine URL-codierten text-string zu serialisieren Formular-Steuerelement-Werte, wie<input>
,<textarea>
und<select>
. Es wird jedoch nicht include file-input-Feld beim serialisieren der form, und damit Ihre remote-AJAX-handler nicht erhalten die Datei überhaupt. Also, wenn Sie beim hochladen der Datei durch AJAX, verwenden Sie FormData Objekt. Aber Bedenken Sie, dass alte Browser nicht unterstützen FormData-Objekt. FormData-Unterstützung gestartet wird von den folgenden desktop-Browser-Versionen: Internet Explorer 10+, Firefox 4.0+, Chrome 7+, Safari 5+, Opera 12+.Da Sie erwarten ein json-Objekt vom server, fügen Sie diese Einstellung
dataType:'json'
zu Ihrem AJAX-request.dataType
ist die Art der Daten, die Sie erwarten sind zurück vom server.Also die Lösung würde wie folgt Aussehen:
Halten Sie Ihre HTML form, wie es ist, und ändern Sie Ihre jQuery/AJAX Skript in der folgenden Art und Weise,
Und auf sessions.php Seite, die Bearbeitung Ihrer Formular wie dieses:
Wenn Sie contentType zu false, ajax header nicht zu senden, im Ergebnis, wenn Sie senden somehing
type:POST
header nicht enthalten, Ihre Daten, also server kann es nicht sehen. Wenn SieGET
zu tun, es wird funktionieren, weil die Daten sended mitGET
(nach url) nicht in der Kopfzeile.Entfernen Sie einfach contentType
processData wird verwendet, um Daten zu senden, als es ist - Ajax-Dokumentation
Sind Sie contentType auf false, das ist der Grund, warum PHP nicht Parsen Ihre post-body
Verwenden $.post() für ajax :
Verwenden Sie den folgenden code in Ihre html-code und entfernen contentType : false,
processData: false
Wenn man bedenkt das ist dein HTML-Formular
HTML:
Können Sie den Aufruf der jQuery-Funktion wie diese
JS:
Bekommen Sie alle Parameter in Ihr session.php Datei wie
Ich hoffe, dies löst dein problem.
Sie brauchen, um Ihre Skript:
Versuchen Sie es mit
new FormData
statt.serialize()
.Hinweis : Sie verwendet werden
contentType
zufalse
bedeuten, dass jQuery nicht fügen Sie eine Content-Type-header. Sie sind mit jQuery .serialize () - Methode erzeugt einen text-string in den standard URL-notation kodiert. Sie müssen pass-un-codierte Daten, wenn Sie mit "contentType: false".Ändern Sie Ihr Skript, um
Ihre Codierung korrekt ist.Entfernen processData und contentType von Ajax wird es funktionieren
Entfernen, die Methode,Aktion: post und leer von form-tag, wie Sie benötigen, um alle details in der ajax-Methode nur.
oder löschen Sie die Formular-tag selbst als ajax-Methode kümmert sich um den post nennen.
diese zu lösen, wird hoffentlich
method="post"
entfernt wird, dann wie bekommt er$_POST
variable Werte?method="post"
während senden Sie das Formular mitajax
. Wenn Sie nicht erwähnt werden-Methode, es wird prüfen, wieGET
Methode standardmäßig. Auf "Absenden" klicken, werden alle Parameter-details werden angezeigt in der URL. Wenn Sie dies vermeiden wollen, müssen Sie metione.preventDefault();
auf "Absenden" klicken.