web-dev-qa-db-ja.com

JqueryおよびHTML FormDataは「Uncaught TypeError:Illegal invocation」を返します

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

手伝って頂けますか?

72
Caio Tarifa

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

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

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

158
Blender

私は2つのオプションを使用して同じ問題を修正しました

contentType: false
processData: false

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

10
Hamid

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

8
Anup Shetty

私の経験:

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

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

3
Nowdeen