J'essaie de télécharger l'image avec jquery et ajax. Mais une chose étrange s'est produite ici. Dans la console Enregistrez son affichage
TypeError: 'append' a appelé un objet qui ne met pas en forme l'interface FormData.
S'il vous plaît, dites-moi ce que j'ai fait mal ici?
JS script
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>
Pour utiliser formdata avec jquery, vous devez définir les options correctes
$.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
ProcessData (par défaut: true)
Type: Boolean
Par défaut, les données transmises à l'option de données en tant qu'objet (techniquement, autre chose qu'une chaîne) seront traitées et transformées en une chaîne de requête, en fonction du type de contenu par défaut "application / x-www-form-urlencoded" . Si vous souhaitez envoyer un DOMDocument ou d'autres données non traitées, définissez cette option sur false.
Ajoutez ces deux paramètres dans votre AJAX pour résoudre votre problème:
processData: false, contentType: false,
Vous devez définir ce paramètre dans l'appel ajax:
enctype: 'multipart/form-data'