Comment faire pour télécharger un fichier à l'aide d'Ajax sur le POST?
Je sais, les sujets ne manquent pas sur ce sujet, mais garder avec moi. Je voudrais télécharger un fichier vers le serveur à l'aide d'Ajax ou d'un équivalent.
# html
<form method="post" id="Form" enctype="multipart/form-data">
{% csrf_token %} # django security
<input id="image_file" type="file" name="image_file">
<input type="submit" value="submit">
</form>
# javascript
$(document).on('submit', '#Form', function(e){
e.preventDefault();
var form_data = new FormData();
form_data.append('file', $('#image_file').get(0).files);
$.ajax({
type:'POST',
url:'my_url',
processData: false,
contentType: false,
data:{
logo:form_data,
csrfmiddlewaretoken:$('input[name=csrfmiddlewaretoken]').val(), # django security
},
});
});
# views.py (server side)
def myFunction(request):
if request.method == 'POST':
image_file = request.FILES
...
...
Je pense qu'il y a un problème avec la façon dont je l'ai configuré la fonction ajax depuis le mode débogage, toutes les données sont renvoyées à l'exception de la logo
.
Je fais quelque chose de mal?
OriginalL'auteur Hiroyuki Nuri | 2017-06-22
Vous devez vous connecter pour publier un commentaire.
La méthode ci-dessous fonctionne pour moi, il va le soumettre à toute forme de valeur que
serialize()
. Vous obtiendrez toutes les entrées de formulaire qui est à l'intérieurrequest.POST
et le logorequest.FILES
Essayez ceci:
Mise à jour:
fondamentalement
async:false
va faire une requête ajax et arrêter d'exécuter tout autre code js jusqu'au moment demander à obtenir, car le téléchargement du fichier peut prendre un certain temps à charger sur le serveur.Tout
cache
va forcer le navigateur à ne pas mettre en cache les données téléchargées à obtenir des données à jour dans la requête ajaxLa Documentation Officielle ici
Vous n'avez pas besoin
async: false
plus (au contraire: si vous le réglez, vous obtiendrez un message d'avertissement dans la console Chromée)Synchrone XMLHttpRequest sur le thread principal est déconseillée en raison de ses effets néfastes pour l'expérience de l'utilisateur final. Pour en savoir plus, consultez xhr.spec.whatwg.org.
OriginalL'auteur Mahesh Singh Chouhan
En regardant en arrière, plus la réponse est peu pratique et n'est pas recommandé.
asnyc: false
interrompt l'ensemble de Javascript suffit de télécharger un fichier, vous êtes susceptible de tir à d'autres fonctions lors de l'upload.Si vous utilisez JQuery, uniquement pour l'utilisation de
ajax
, puis je le conseille à l'aide deaxios
:Axios Documentation
Jquery/Ajax réponse:
Jquery/Ajax Documentation
OriginalL'auteur Hiroyuki Nuri