98 votes

ajax formdata : Invocation illégale

J'essaie de faire un ajax script pour l'upload pour Symfony 2. Chrome renvoie cette erreur :

Erreur de type non résolue : Invocation illégale jquery.min.js:4

Je pense que c'est dû à la FormData n'est pas correctement construit (j'essaie le script avec .serialized() :

$(document).ready(function() {
  $('#formImage').submit(function(event) {
    event.preventDefault();
    // appel Ajax
    alert("ajax");

    var input = document.getElementById("rasta_blogbundle_imagetype_file");
    console.log(input); 
    var formdata = false;  

    if (window.FormData) {  
        formdata = new FormData();
        console.log('formdata initialized ...');  
    }
    else{
        console.log('formdata not supported');
    }

    formdata.append('name',$('#rasta_blogbundle_imagetype_name').val());
    console.log(formdata);
    formdata.append('file',input);
    formdata.append('_token',$('#rasta_blogbundle_imagetype__token').val());
    console.log(formdata);    
    //alert(DATA);

    if (formdata){  
        $.ajax({
            url: $(this).attr('action'), // le nom du fichier indiqué dans le formulaire
            type: $(this).attr('method'), // la méthode indiquée dans le formulaire (get ou post)
            cache: false,
            //data : $(this).serialize(),
            data: formdata ,
            success: function(data) { // je récupère la réponse du fichier PHP
                $('#myModal').html(data);
                console.log('ok');
            }        
            //return false; //
        }); 
    }
  });
});

281voto

user640916 Points 164

JQuery essaie de transformer votre objet FormData en une chaîne de caractères, ajoutez ceci à votre appel $.ajax :

processData: false,
contentType: false

4voto

user889030 Points 909

Il arrive parfois que jquery ne sérialise pas correctement les données en interne pour y remédier il faut ajouter ceci.

cache : false,
dataType    : 'json',
processData : false,

3voto

Ibnul Quayum Points 79

J'ai résolu le problème en ajoutant les éléments suivants :

contentType: false,
processData: false,
cache: false,

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X