我试图创建AJAXform handler。问题是我在上传图片文件时遇到了麻烦。AJAX/jQuery的/ PHP - AJAX表单处理程序 “非法调用”
上传的文件会导致:
Uncaught TypeError: Illegal invocation
我想这是因为我AJAXformhandler有processData设置为默认值,因此不能文件转换成字符串。 但是,如果我将processData设置为false,那么发送的数据将不会被我的php文件识别。
我怎么能让这个表单发送文件和字符串,然后在PHP中读取它们?
这里是我的阿贾克斯/ 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标记(有点乱,因为我刚加入的形式能够调用它):
BASIC INFORMATION
Company name:
Company logo:
First investment amount:
Basic wage per EP:
AREA OF ECONOMY
Company type:
Choose company type
Resource gathering (5.000 eDollars)
Processing/manufacturing (15.000 eDollars)
Production (30.000 eDollars)
Labolatory (100.000 eDollars)
Architecture development (500.000 eDollars)
Innovations (1.000.000 eDollars)
Resource:
Choose resource
Lumbermill (Wood)
Quarry (Stone)
Mine (Ore)
Mine (Coal)
Farm (Food)
Farm (Leather and cloth)
+0
要上传二进制数据你需要使用一个FormData对象,而不是一个普通的对象。您还需要在'$ .ajax'调用中将'contentType'和'processData'设置为'false'。请参阅副本以获取更多信息 –