web-dev-qa-db-fra.com

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

J'utilise ce script pour télécharger mes fichiers image: 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?

72
Caio Tarifa

jQuery traite l'attribut data et convertit les valeurs en chaînes.

Ajouter processData: false à votre objet d’options corrige l’erreur, mais je ne suis pas sûr qu’il corrige le problème.

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

158
Blender

j'ai eu le même problème que j'ai résolu avec deux options

contentType: false
processData: false

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

10
Hamid

Ajouter processData: false à la $.ajax options vont résoudre ce problème.

8
Anup Shetty

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 , puisque $ ('# myInputField ') se trouvait dans un fichier différent de celui dans lequel le système avait indiqué un code incorrect. J'espère que cette réponse aidera les boursiers dans la même erreur à éviter de perdre du temps.

3
Nowdeen