J'essaye de télécharger une image avec jquery et ajax. Mais une chose étrange s'est produite ici. Dans la console Consigner son affichage
TypeError: 'append' appelé sur un objet qui n'implémente pas l'interface FormData.
Veuillez me dire ce que j'ai fait de mal ici?
Script JS
var prosrc=$("#pro_pix img").last().attr("src");
$("#logoform").on('change',function(event){
var postData = new FormData(this);
$("#pro_pix img").last().hide();
$("#pro_pix img").first().show();
event.preventDefault();
$.ajax(
{
url : "/function/pro_pic_upload.php",
type: "POST",
data : postData,
success:function(data, textStatus, jqXHR)
{
$("#pro_pix img").last().show();
$("#pro_pix img").first().hide();
$("#pro_pix h6").text(data);
},
error: function(jqXHR, textStatus, errorThrown)
{
//if fails
}
});
});
Mon balisage HTML
<div class="row">
<!-- left column -->
<div id="pro_pix" class="col-md-4 col-sm-6 col-xs-12">
<div class="text-center">
<img src="template/image/725.GIF" class="avatar img-circle img-thumbnail" style="display:none" alt="avatar">
<img src="<?php echo $rowuser['profile_logo']; ?>" class="avatar img-circle img-thumbnail" alt="avatar">
<h6>Upload a different photo...</h6>
<form role="form" id="logoform" enctype="multipart/form-data">
<input id="logo" name="logo" type="file" class="text-center center-block well well-sm">
</form>
</div>
</div>
Réponses:
pour utiliser formdata avec jquery, vous devez définir les bonnes options
$.ajax({ url : "/function/pro_pic_upload.php", type: "POST", data : postData, processData: false, contentType: false, success:function(data, textStatus, jqXHR){ $("#pro_pix img").last().show(); $("#pro_pix img").first().hide(); $("#pro_pix h6").text(data); }, error: function(jqXHR, textStatus, errorThrown){ //if fails } });
Référence .ajax
la source
postData.append("name",value);
{cat:"meow",dog:"bark"}
:, vous devez d'abord utiliser JSON.stringify:postData.append("name",JSON.stringify(someObject));
et analyser le json côté serveurcache: false
cela m'a posé des problèmes tout à l'heure. Avec tout cela fixé.Ajoutez ces deux paramètres dans votre AJAX pour résoudre votre problème:
processData: false, contentType: false,
la source
cache: false
cela m'a posé des problèmes tout à l'heure. Avec tout cela fixé.cache: false
?GET
requête. Lecache:false
ne fonctionnera pas correctement pour laPOST
demande. Comme vous l'avez mentionné dans le commentaire ci-dessus, cela ne fonctionne que pour les demandesHEAD
etGET
. EtFormData
est utilisé pour soumettre des données de formulaire qui devraient être unPOST
au lieu deGET
. Je vous suggère donc de toujours utiliser POST pour soumettre les données du formulaire.Vous devez définir ce paramètre dans l'appel ajax:
enctype: 'multipart/form-data'
la source
Ajouter:
processData: false, contentType: false,
va certainement vous aider avec le fichier, en plus, si vous faites des erreurs ou des messages de réussite sur la page, vous voudrez utiliser json pour vous faciliter la vie.
exemple:
dataType: 'json',
cela vous aidera à analyser vos réponses. Sans cela, cela provoquera une erreur.
la source
Modifiez simplement votre ligne:
var postData = new FormData(this);
à:
var postData = new FormData($(this));
la source