jQuery FormData POST - chargement de fichier
Je suis en train d'essayer de soumettre un formulaire complet pour le traitement côté serveur à l'aide de jQuery. Le formulaire contient divers domaines, y compris le chargement d'un fichier option. Je suis en train d'utiliser FormData pour cela que je n'ai pas de soins sur les navigateurs qui ne supportent pas le moment.
J'ai le texte suivant (simplifié) de jQuery code:
$("#create_event_form").submit(function(event) {
event.preventDefault();
var formData = new FormData($(this));
$.post(
"create_entity.php",
{ formData: formData },
function(data) {
var response = jQuery.parseJSON(data);
if(response.code == "success") {
alert("Success!");
} else if(response.code == "failure") {
alert(response.err);
}
}
);
});
Et de mon côté serveur se présente comme suit:
<?php
require_once('includes/database.php');
$dbh = db_connect();
$response = array();
if($_SERVER['REQUEST_METHOD'] == "POST") {
//do some other stuff...
//upload entity picture and update database
$url = $_FILES['entity_pic']['name'];
if($url != "") {
if($type == "user") {
$pic_loc = "images/profiles/";
} else if($type == "chapter") {
$pic_loc = "images/chapters/";
} else if($type == "group") {
$pic_loc = "images/groups/";
} else if($type == "event") {
$pic_loc = "images/events/";
}
//upload the picture if it's not already uploaded
if(!file_exists($pic_loc . $_FILES['entity_pic']['name'])) {
move_uploaded_file($_FILES['entity_pic']['tmp_name'], $pic_loc . $url);
}
$image_query = "INSERT INTO image (entity_id, url, type) VALUES (:entity_id, :url, :type);";
$image_query_stmt = $dbh->prepare($image_query);
$image_query_stmt->bindParam(":entity_id", $entity_id);
$image_query_stmt->bindParam(":url", $url);
$image_query_stmt->bindValue(":type", $type);
if(!$image_query_stmt->execute()) {
die(print_r($image_query_stmt->errorInfo()));
}
}
echo json_encode($response);
}
?>
Et HTML:
<form id="create_event_form" action="create_entity.php" method="POST" enctype='multipart/form-data'>
<input type="file" name="entity_pic" value="Insert Photo" />
<!-- other inputs -->
</form>
Droit maintenant, je reçois un Illégales invocation d'erreur, sans doute sur mon initialisation de mon objet FormData. J'ai été toujours à la recherche d'exemple de la façon de le faire avec jQuery et je viens vide. Aussi, je tiens à préciser que mon côté serveur code du travail. Lorsque je passe le formData "formData" à mon script PHP, comment puis-je accéder aux champs-t-il? Serait-il "$_POST['formData']['nom_champ']" ou juste $_POST['nom_champ'] ou tout autre chose?
Merci pour toute aide.
Le seul problème est que j'ai une tonne d'autres valeurs dans la forme que je veux présenter. Dois-je faire un ajout de la mention pour chacun? J'avais espéré que j'ai pu initialiser l'objet FormData avec une forme de référence...
Aussi, j'ai besoin d'aide pour comprendre comment le processus de l'soumis objet FormData dans mon code côté serveur
OriginalL'auteur Jon Rubins | 2012-12-06
Vous devez vous connecter pour publier un commentaire.
FormData
prend un élément de formulaire dans son constructeur pas un objet jQuery -var formData = new FormData(this);
Vous avez défini certains options pour l'ajax de jQuery pour manipuler l'objet formdata de sorte que vous devriez utiliser $.ajax au lieu de $.post passer le formdata lui-même que les données.
OriginalL'auteur Musa
Pour répondre à votre dernière question, je crois qu'il serait de $_POST['nom_champ']. Découvrez ce post pour quelques informations sur l'application que vous cherchez:
Envoi multipart/formdata avec jQuery.ajax
Espère que cela aide 🙂
OriginalL'auteur Chris McGuire