Jquery ve HTML FormData, "Yakalanmamış TypeError: Yasadışı çağrı" döndürüyor


83

Resim dosyalarımı yüklemek için bu komut dosyasını kullanıyorum: 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
    });
  });
});

Ancak yükle düğmesini tıkladığımda JavaScript konsolu şu hatayı döndürüyor:

Uncaught TypeError: Illegal invocation 

jQuery Hatası

Bana yardımcı olabilir misiniz?


Bundan emin misin? dataType: 'json',???
Praveen Kumar Purushothaman

1
Evet, URL bu biçimde dönecektir.
Caio Tarifa

Benim durumumda, serileştirilmiş bir nesneyi eyleminin parametresi olarak kabul eden bir .NET MVC Denetleyicisine daha büyük bir veri kümesinin parçası olarak bir dosya göndermek istedim. Önerdiği gibi, bir FormData nesneyi kullanmak gerekliydi lilalinux yanı sıra, processData: falseönerdiği gibi, Blender , ayrıca ve contentType: false önerdiği gibi, Caio Tarifa'da . Her şey az her üç eser yoktu. [Bu yanıta] bakın ( stackoverflow.com/a/3
nbrosz

Yanıtlar:


169

jQuery, dataniteliği işler ve değerleri dizelere dönüştürür.

processData: falseSeçenekler nesnenize eklemek hatayı düzeltir, ancak sorunu çözüp çözmediğinden emin değilim.

Demo: http://jsfiddle.net/eHmSr/1/


Teşekkürler, ancak bu özelliği kaldırmam gerekiyor, şu soruya bakın: stackoverflow.com/questions/12431760/… .
Caio Tarifa

22
Sadece ekleyerek düzeltirim contentType: false. Tekrar teşekkürler!
Caio Tarifa

@ Blender Bu kod sistemimde çalışıyor ama arkadaşlarımda çalışmıyor (ikisi de Windows 10 kullanıyor), dosya gönderilmiyor Konsolda hata yok.
Suchit kumar

3
Benim durumumda sorun, var data = {}; Ancak, var data = new FormData ();
lilalinux

Bunun neden işe yaramadığını anlayamadım ... bu sürecin ciki değil bir ile yazıldığını fark edene kadar .
Yaakov Ainspan

19

Aynı sorunu yaşadım

Bunu iki seçeneği kullanarak düzelttim

contentType: false
processData: false

Aslında bu iki komutu $ .ajax ({}) fonksiyonuma ekledim


1
Bunlar $ .post ile kullanılabilir mi? Öyleyse nasıl??
alex

8

Ekleme processData: falseiçin $.ajaxseçenekler bu sorunu çözecektir.


3

Benim deneyimim:

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

Sorun şu ki, $ ('# myInputField'); 'in sonuna .val () eklemeyi unuttum. $ ('# myInputField'), sistemin yanlış koda işaret ettiğinden farklı bir dosyadayken, bu eylem neyin yanlış olduğunu anlamaya çalışırken zaman kaybetmeme neden oluyor . Umarım bu cevap, zaman kaybetmekten kaçınmak için aynı hatayı yapan arkadaşlara yardımcı olur.


-2

Benim durumumda, parametreler listesinde bir hata oluştu iyi biçimlendirilmedi. Bu nedenle, parametrelerin iyi biçimlendirildiğinden emin olun. Örneğin doğru parametre biçimi için

data: {'reporter': reporter,'partner': partner,'product': product}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.