source

Jquery/Ajax 양식 제출(enctpe="formart/form-data")왜 '콘텐츠'는유형:False' 원인 정의되지 않은 인덱스가 PHP에 있습니까?

manycodes 2023. 4. 1. 09:39
반응형

Jquery/Ajax 양식 제출(enctpe="formart/form-data")왜 '콘텐츠'는유형:False' 원인 정의되지 않은 인덱스가 PHP에 있습니까?

enctpe="formart/form-data"와 함께 양식을 제출하려고 합니다.텍스트 입력에 대한 Ajax 제출을 확인하면 양식에 jpeg/png 업로드가 포함되기 때문에 이 설정이 있습니다.

  1. html 형식의 액션을 사용하여 스크립트를 참조하면 php는 정상적으로 동작합니다.

  2. 경보 행에 productName이 표시되므로 양식 데이터가 다음 jquery에 의해 올바르게 검색된 것 같습니다.= Test+Name&productDescription=테스트+설명& Other Product Details =

  3. jquery success 함수에 의해 HTML로 인쇄된 반환된 데이터는 다음과 같은 php 오류입니다.정의되지 않은 인덱스: productName

  4. contentType: false를 삭제하면 문제가 해결됩니다.

구글에서 jquery/ajax multipart/form-data submission을 검색하면 적어도 상위 히트에는 'content Type:false'가 주로 포함됩니다.누가 이유를 설명해 주시겠어요?

http://digipiph.com/blog/submitting-multipartform-data-using-jquery-and-ajax http://hayageek.com/jquery-ajax-form-submit/ jQuery.ajax를 사용하여 멀티파트/폼데이터 전송

jquery API 문서에는 다음과 같은 내용이 기재되어 있습니다.유형(기본값: 'application/x-www-form-urlencoded; charset=UTF-8') 유형: 문자열 서버에 데이터를 전송할 때 이 컨텐츠 유형을 사용하십시오.

멀티파트/폼 데이터 전송에 대해 false로 설정해야 하는 이유는 무엇입니까?잘못된 설정은 언제 필요합니까?

쿼리:

  $("#addProductForm").submit(function (event) {
      event.preventDefault();
      //grab all form data  
      var formData = $(this).serialize();

      $.ajax({
          url: 'addProduct.php',
          type: 'POST',
          data: formData,
          async: false,
          cache: false,
          contentType: false,
          processData: false,
          success: function (returndata) {
              $("#productFormOutput").html(returndata);
              alert(formData);
          },
          error: function () {
              alert("error in ajax form submission");
          }
      });

      return false;
  });

contentType할 수 있는 선택권false에 사용됩니다.multipart/form-data파일을 전달하는 폼입니다.

셋팅할 때contentType할 수 있는 선택권falsecontent-type 헤더를 추가하지 않도록 jQuery를 강제 설정합니다.그렇지 않으면 경계 문자열이 없어집니다.또한 멀티파트/폼데이터를 통해 파일을 제출할 때는processData플래그가 false로 설정되어 있지 않으면 jQuery는 FormData를 문자열로 변환하려고 시도하지만 실패합니다.


To try and fix your issue:

jQuery의 사용.serialize()표준 URL 인코딩 표기로 텍스트 문자열을 생성하는 메서드입니다.

사용할 때 인코딩되지 않은 데이터를 전달해야 합니다.contentType: false.

사용해보십시오.new FormData대신.serialize():

  var formData = new FormData($(this)[0]);

formData가 php 페이지로 전달되는 방법의 차이점을 직접 확인하시기 바랍니다.console.log().

  var formData = new FormData($(this)[0]);
  console.log(formData);

  var formDataSerialized = $(this).serialize();
  console.log(formDataSerialized);

액션 속성을 다음과 같이 설정해 주시면 문제가 해결됩니다.

<form name="addProductForm" id="addProductForm" action="javascript:;" enctype="multipart/form-data" method="post" accept-charset="utf-8">

jQuery 코드:

$(document).ready(function () {
    $("#addProductForm").submit(function (event) {

        //disable the default form submission
        event.preventDefault();
        //grab all form data  
        var formData = $(this).serialize();

        $.ajax({
            url: 'addProduct.php',
            type: 'POST',
            data: formData,
            async: false,
            cache: false,
            contentType: false,
            processData: false,
            success: function () {
                alert('Form Submitted!');
            },
            error: function(){
                alert("error in ajax form submission");
            }
        });

        return false;
    });
});

언급URL : https://stackoverflow.com/questions/20795449/jquery-ajax-form-submission-enctype-multipart-form-data-why-does-contentt

반응형