JqueryとHTMLFormDataは「UncaughtTypeError:Illegalinvocation」を返します


83

このスクリプトを使用して画像ファイルをアップロードしています: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
    });
  });
});

しかし、アップロードボタンをクリックすると、JavaScriptコンソールは次のエラーを返します。

Uncaught TypeError: Illegal invocation 

jQueryエラー

手伝って頂けますか?


これ本気なの?dataType: 'json',???
Praveen Kumar Purushothaman 2012年

1
はい、URLはこの形式で返されます。
カイオタリファ2012年

私の場合、より大きなデータセットの一部としてファイルを.NET MVCコントローラーに送信し、シリアル化されたオブジェクトをそのアクションのパラメーターとして受け入れました。提案されたように、いるFormDataオブジェクトを使用する必要があったlilalinuxだけでなく、processData: falseによって示唆されているように、ブレンダーまたと contentType: falseによって示唆されているように、カイオタリファ3つすべてに満たないものは機能しませんでした。[この回答](stackoverflow.com/a/3
nbrosz 2017

回答:


169

jQueryはdata属性を処理し、値を文字列に変換します。

processData: falseオプションオブジェクトに追加するとエラーが修正されますが、問題が修正されるかどうかはわかりません。

デモ:http//jsfiddle.net/eHmSr/1/


ありがとう、しかし私はこのプロパティを削除する必要があります、この質問を見てください:stackoverflow.com/questions/12431760/…
カイオタリファ2012年

22
を追加するだけで修正しcontentType: falseます。再度、感謝します!
カイオタリファ2012年

@Blenderこれと同じコードが私のシステムでは機能していますが、友達では機能していません(どちらもWindows 10を使用しています)。ファイルは投稿されません。コンソールにエラーはありません。
Suchit kumar 2016年

3
私の場合、問題は、var data = {};を使用したことでした。ただし、var data = new FormData();を使用する必要があります。
lilalinux 2016

なぜこれが機能しなかったのか理解できませんでした...プロセスがc2つではなく1つで綴られていることに気付くまで。
Yaakov Ainspan 2017

19

私は同じ問題を抱えていました

私は2つのオプションを使用してそれを修正しました

contentType: false
processData: false

実際、これら2つのコマンドを$ .ajax({})関数に追加しました


1
これらは$ .postで使用できますか?もしそうならどうやって?
アレックス

8

オプションに追加するprocessData: falseと、$.ajaxこの問題が修正されます。


3

私の経験:

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

問題は、$( '#myInputField');の末尾に.val()を追加するのを忘れたことです。$( '#myInputField')がそのシステムが誤ったコードを指摘したのとは異なるファイルにあったため、このアクションは何が間違っているのかを理解しようとして時間を無駄にし、不正な呼び出しエラーを引き起こします。この答えが、同じ過ちを犯した仲間が時間を失うことを避けるのに役立つことを願っています。


-2

私の場合、パラメータのリストに誤りがあり、整形式ではありませんでした。したがって、パラメータが適切に形成されていることを確認してください。たとえば、パラメータの正しい形式

data: {'reporter': reporter,'partner': partner,'product': product}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.