86 votes

Jquery et HTML FormData renvoient "Uncaught TypeError : Invocation illégale"

J'utilise ce script pour télécharger mes fichiers images : http://jsfiddle.net/eHmSr/

$('.uploader input:file').on('change', function() {
  $this = $(this);

  $('.alert').remove();

  $.each($this[0].files, function(key, file) {
    $('.files').append('<li>' + file.name + '</li>');

    data = new FormData();
    data.append(file.name, file);

    $.ajax({
      url: $('.uploader').attr('action'),
      type: 'POST',
      dataType: 'json',
      data: data
    });
  });
});

Mais lorsque je clique sur le bouton de téléchargement, la console JavaScript renvoie cette erreur :

Uncaught TypeError: Illegal invocation 

jQuery Error

Pouvez-vous m'aider ?

175voto

Blender Points 114729

JQuery traite les data et convertit les valeurs en chaînes de caractères.

Ajout processData: false à votre objet d'options corrige l'erreur, mais je ne suis pas sûr que cela corrige le problème.

Démonstration : http://jsfiddle.net/eHmSr/1/

22voto

Hamid Points 186

J'ai eu le même problème

J'ai résolu ce problème en utilisant deux options

contentType: false
processData: false

En fait, j'ai ajouté ces deux commandes à ma fonction $.ajax({})

8voto

Anup Shetty Points 447

Ajout processData: false à la $.ajax permettront de résoudre ce problème.

3voto

Nowdeen Points 669

Mon expérience :

  var text = $('#myInputField');  
  var myObj = {title: 'Some title', content: text};  
  $.post(myUrl, myObj, callback);

Le problème est que j'ai oublié d'ajouter .val() à la fin de $('#myInputField') ; cette action me fait perdre du temps à essayer de comprendre ce qui n'allait pas, provoquant une erreur d'invocation illégale Le système a signalé le code incorrect car $('#myInputField') se trouvait dans un fichier différent. J'espère que cette réponse aidera les personnes qui font la même erreur à ne pas perdre de temps.

-2voto

Dans mon cas, il y avait une erreur dans la liste des paramètres qui n'était pas bien formée. Il faut donc s'assurer que les paramètres sont bien formés. Par exemple, format correct des paramètres

data: {'reporter': reporter,'partner': partner,'product': product}

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