Jquery 및 HTML FormData가 "Uncaught TypeError : Illegal invocation"을 반환합니다.


82

이 스크립트를 사용하여 이미지 파일을 업로드하고 있습니다. 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

1
예, URL은이 형식으로 반환됩니다.
카 이오 타리 파

필자의 경우에는 직렬화 된 개체를 동작에 대한 매개 변수로 허용하는 .NET MVC 컨트롤러에 더 큰 데이터 집합의 일부로 파일을 제출하고 싶었습니다. 에 의해 제안이는 FormData 객체를 사용하는 것이 필요하다고 lilalinux 뿐만 아니라, processData: false에 의해 제안, 블렌더 , 도 및 contentType: false 의해 제안, 카 이오 타리 파 . 세 가지 보다 적은 것은 작동하지 않았습니다. 참조 [이 답변] ( stackoverflow.com/a/3
nbrosz

답변:


169

jQuery는 data속성을 처리하고 값을 문자열로 변환합니다.

추가processData: false 옵션 객체하면 오류를 해결하지만, 나는 확실히 그것으로 문제가 해결되는 경우가 아니에요.

데모 : http://jsfiddle.net/eHmSr/1/


감사합니다.이 속성을 제거해야합니다 . 다음 질문을 참조하세요. stackoverflow.com/questions/12431760/… .
카 이오 타리 파

22
나는 그것을 고치고 단지 contentType: false. 다시 한 번 감사드립니다!
Caio Tarifa

@Blender이 동일한 코드는 내 시스템에서 작동하지만 내 친구에서는 작동하지 않습니다 (둘 다 Windows 10을 사용하고 있음), 파일이 게시되지 않습니다. 콘솔에 오류가 없습니다.
Suchit kumar 2016

3
제 경우 문제는 내가 var data = {}를 사용했다는 것입니다. 그러나 var data = new FormData ();를 사용해야합니다.
lilalinux

왜 이것이 작동하지 않는지 알 수 없었습니다. 프로세스의 철자가 c2 가 아니라 1이라는 것을 깨달을 때까지 .
Yaakov Ainspan

16

나는 두 가지 옵션을 사용하여 같은 문제를 해결했습니다.

contentType: false
processData: false

실제로 $ .ajax ({}) 함수에이 두 명령을 추가했습니다.


1
$ .post와 함께 사용할 수 있습니까? 그렇다면 어떻게 ??
alex

8

추가 processData: false받는 $.ajax옵션을하면이 문제가 해결됩니다.


3

내 경험:

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

문제는 $ ( '# myInputField'); 끝에 .val ()을 추가하는 것을 잊었다는 것입니다. 이 작업은 $ ( '# myInputField')가 해당 시스템이 잘못된 코드를 지적한 것과 다른 파일에 있었기 때문에 무엇이 잘못되었는지 파악하는 데 시간을 낭비하게 하여 Illegal Invocation Error를 발생시킵니다 . 이 답변이 같은 실수를 저지른 동료들이 시간을 낭비하지 않도록 도와주기를 바랍니다.


-1

제 경우에는 매개 변수 목록에 잘못된 형식이 잘못되어있었습니다. 따라서 매개 변수의 형식이 올바른지 확인하십시오. 예를 들어 올바른 매개 변수 형식

data: {'reporter': reporter,'partner': partner,'product': product}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.