Javascript 使用文本字段和文件发布请求
下面我将介绍如何使用ajax和php上传文件。但是,这仅适用于图像附件,而我的表单是文本字段和附件的混合体。我一个人上传文本字段没有问题 这是我的附件HTML:Javascript 使用文本字段和文件发布请求,javascript,jquery,forms,Javascript,Jquery,Forms,下面我将介绍如何使用ajax和php上传文件。但是,这仅适用于图像附件,而我的表单是文本字段和附件的混合体。我一个人上传文本字段没有问题 这是我的附件HTML: <!-- Attachments --> <div class="row"> <div class="col-md-4"> <div class="input-group"> <div class="input-group-prepend"
<!-- Attachments -->
<div class="row">
<div class="col-md-4">
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text" id="basic-addon1" style="background-color: #fff;"><i class="fas fa-plus"></i></span>
</div>
<input type="submit" class="form-control" value="Add Attachment" id="addAttachment">
</div>
</div>
</div>
我在ajax请求的开始标记上发现一个错误:
jquery-3.4.1.min.js:2 Uncaught TypeError: Illegal invocation
at i (jquery-3.4.1.min.js:2)
at qt (jquery-3.4.1.min.js:2)
at Function.k.param (jquery-3.4.1.min.js:2)
at Function.ajax (jquery-3.4.1.min.js:2)
at HTMLButtonElement.<anonymous> (application_form.js:219)
at HTMLButtonElement.dispatch (jquery-3.4.1.min.js:2)
at HTMLButtonElement.v.handle (jquery-3.4.1.min.js:2)
jquery-3.4.1.min.js:2未捕获类型错误:非法调用
at i(jquery-3.4.1.min.js:2)
qt时(jquery-3.4.1.min.js:2)
at Function.k.param(jquery-3.4.1.min.js:2)
在Function.ajax(jquery-3.4.1.min.js:2)
在HTMLButtoneElement。(申请表js:219)
在HTMLButtonElement.dispatch(jquery-3.4.1.min.js:2)
位于HTMLButtonElement.v.handle(jquery-3.4.1.min.js:2)
您需要设置contentType:false
和processData:false
以使用jQuery ajax发送表单数据
contentType
选项将自动设置内容类型标题,processData
选项强制jQuery将表单数据转换为字符串,这是不可能的
因此,您的Ajax源代码将是:
$.ajax({
type: "POST",
url: "ajax/application_form.php",
data: formData,
enctype: "multipart/form-data",
contentType: false,
processData: false,
success: function(response) {
console.log(response);
}
});
你没有仔细阅读教程。您遗漏了
processData:false
和contentType:false
选项。@Barmar不再显示任何错误,但我的PHP文件没有响应。我已经在上面添加了PHP代码,我已经尝试过了,但是我的PHP文件应用程序\u表单没有响应。PHP
发布在编辑上方:似乎我也有数据类型:“json”
。我删除了它,现在得到了响应。我在执行if(isset($POST['LoanType')和isset($POST['LoanPurpose'])和isset($POST['Principal'])和isset($POST['Term'])和isset($POST['PaymentMode'])和isset($POST['Interest'])和isset($POST['Interest'])和isset($POST['pulture']){)时没有得到响应;
但是我得到了一个带有Object.keys(applicationFormData).forEach(x=>{formData.append(x,applicationFormData[x]);});
而不是formData.append('applicationFormData',JSON.stringify(applicationFormData));
if (isset($_POST)) {
if (isset($_FILES['files'])) {
echo "Files set";
} else {
echo "Files not set";
}
}
jquery-3.4.1.min.js:2 Uncaught TypeError: Illegal invocation
at i (jquery-3.4.1.min.js:2)
at qt (jquery-3.4.1.min.js:2)
at Function.k.param (jquery-3.4.1.min.js:2)
at Function.ajax (jquery-3.4.1.min.js:2)
at HTMLButtonElement.<anonymous> (application_form.js:219)
at HTMLButtonElement.dispatch (jquery-3.4.1.min.js:2)
at HTMLButtonElement.v.handle (jquery-3.4.1.min.js:2)
$.ajax({
type: "POST",
url: "ajax/application_form.php",
data: formData,
enctype: "multipart/form-data",
contentType: false,
processData: false,
success: function(response) {
console.log(response);
}
});