Hochladen von Daten und Dateien in einem einzigen Formular mit Ajax
Bei der Verwendung von jQuery und Ajax zur Interaktion mit Formularen ist es üblich, beides zu übermitteln Daten oder Dateien, aber nicht beides gleichzeitig. Dies kann eine Herausforderung darstellen, wenn Sie beide Arten von Inhalten hochladen müssen.
Problemerklärung
Das Hauptproblem liegt in der unterschiedlichen Art und Weise, wie Daten und Dateien vor der Übermittlung gesammelt werden . Daten werden normalerweise mit der Methode .serialize() serialisiert, während Dateien mit einem FormData-Objekt verarbeitet werden.
Lösung
Um sowohl Daten als auch Dateien in einem Formular hochzuladen über Ajax können Sie die Leistungsfähigkeit von FormData nutzen. Mit diesem Objekt können Sie beide Arten von Inhalten problemlos kombinieren. So geht's:
<form>
$("form#datafiles").submit(function(e) { e.preventDefault(); var formData = new FormData(this); // Gather both data and files into a single FormData object $.ajax({ url: window.location.pathname, // Your PHP endpoint URL type: 'POST', data: formData, success: function(data) { alert(data); // Output the response from your PHP script }, cache: false, contentType: false, processData: false }); });
PHP-Skript
Auf der Serverseite kann Ihr PHP-Skript sowohl auf die von Ihnen übermittelten Daten als auch auf die Dateien zugreifen bilden. Sie können $_POST und $_FILES verwenden, um diese Informationen abzurufen.
<?php // Display contents of $_POST print_r($_POST); // Display contents of $_FILES print_r($_FILES); ?>
Fazit
Durch die Verwendung von FormData können Sie sowohl Daten als auch Dateien problemlos von einem einzigen Ort aus übermitteln Formular mit Ajax erstellen. Dieser Ansatz optimiert Ihre Formulare und verbessert die Effizienz Ihrer Datei- und Datenverwaltung.
Das obige ist der detaillierte Inhalt vonWie kann ich mit Ajax sowohl Daten als auch Dateien gleichzeitig in einem einzigen Formular hochladen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!