나는 AJAX
form handler
. 문제는 형식의 다른 데이터와 함께 이미지 파일을 업로드하는 데 문제가 있다는 것입니다.
업로드 된 파일의 원인은 다음과 같습니다.
포착되지 않은 TypeError : 잘못된 호출
나는이 있기 때문에 추측 AJAX
formhandler
했다 processData
문자열로 파일을 변환 할 수 없습니다 때문에 기본값으로 설정합니다. 그러나 데이터 전송을 설정 processData
하면 false
내 PHP 파일에서 인식되지 않습니다.
이 양식을 어떻게 파일과 문자열 모두를 잘 보내고 PHP로 읽을 수 있습니까?
내 ajax / jquery는 다음과 같습니다 .
$('#createcompany').click(function() {
var formData = {
'ownerid' : $('#id').text(),
'companyname' : $('#companyname').val(),
'logo' : $('#logo')[0].files[0],
'investment' : $('#investment').val(),
'payment' : $('#payment').val(),
'companytype' : $('#companytype').val(),
'companyresource' : $('#companyresource').val()
};
$.ajax({
type : 'POST',
url : 'processcreatecompany.php',
data : formData,
dataType : 'json',
encode : true
}).done(function(data) {
console.log(data);
}).fail(function(data) {
console.log(data);
})
});
그리고 내 PHP 데이터 수신자 라인 :
$ownerid = filter_input(INPUT_POST, 'ownerid', FILTER_SANITIZE_STRING);
$companyname = filter_input(INPUT_POST, 'companyname', FILTER_SANITIZE_STRING);
$investment = filter_input(INPUT_POST, 'investment', FILTER_DEFAULT);
$payment = filter_input(INPUT_POST, 'payment', FILTER_DEFAULT);
$companytype = filter_input(INPUT_POST, 'companytype', FILTER_SANITIZE_STRING);
$companyresource = filter_input(INPUT_POST, 'companyresource', FILTER_SANITIZE_STRING);
파일 요청을 위해 다음을 사용합니다.
$_FILES['logo']
편집하다:
양식의 HTML 마크 업 (방금 호출 할 수 있도록 양식을 추가했기 때문에 약간 지저분 함) :
<form id="formcompany">
<div class="new-company-informations">
<h1>BASIC INFORMATION</h1>
<div id="company-name" class="company-info"><h1>Company name:</h1><input type="text" name="companyname" id="companyname" maxlength="50"></div>
<div id="company-logo" class="company-info"><h1>Company logo:</h1><input type="file" name="logo" id="logo"></div>
<div id="company-investment" class="company-info"><h1>First investment amount:</h1><input type="text" name="investment" id="investment"></div>
<div id="company-payment" class="company-info"><h1>Basic wage per EP:</h1><input type="text" name="payment" id="payment" maxlength="20"></div>
</div>
<div class="new-company-separator"></div>
<div class="new-company-area">
<h1>AREA OF ECONOMY</h1>
<div id="company-type" class="company-area">
<h1>Company type:</h1>
<select name="companytype" id="companytype">
<option value="" selected="selected">Choose company type</option>
<option value="1">Resource gathering (5.000 eDollars)</option>
<option value="2">Processing/manufacturing (15.000 eDollars)</option>
<option value="3">Production (30.000 eDollars)</option>
<option value="4">Labolatory (100.000 eDollars)</option>
<option value="5">Architecture development (500.000 eDollars)</option>
<option value="6">Innovations (1.000.000 eDollars)</option>
</select>
</div>
<div id="company-resource" class="company-area">
<h1>Resource:</h1>
<select name="companyresource" id="companyresource">
<option value="" selected="selected">Choose resource</option>
<option value="1">Lumbermill (Wood)</option>
<option value="2">Quarry (Stone)</option>
<option value="3">Mine (Ore)</option>
<option value="4">Mine (Coal)</option>
<option value="5">Farm (Food)</option>
<option value="6">Farm (Leather and cloth)</option>
</select>
</div>
<input type="hidden" value="<?=$_SESSION['user']['id']?>">
<div id="company-button" class="company-area">
<button id="createcompany">Create</button>
</div>
</div>
</form>
FormData를 사용하고 양식의 ID를 구문 분석하십시오. 이렇게하면 파일을 포함한 양식의 모든 내용이 물론 AJAX를 통해 서버 측 (PHP)으로 구문 분석됩니다.
var formData = new FormData(this);
$.ajax({
type : 'POST',
url : 'processcreatecompany.php',
data : formData,
dataType : 'json',
contentType: false,
processData: false,
}).done(function(data) {
console.log(data);
}).fail(function(data) {
console.log(data);
})
});
당신의 PHP에서 이것을하십시오,
var_dump('Posted fields are '.$_POST);
var_dump('Files are '. $__FILES);
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다