Javascript 使用文本字段和文件发布请求

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"

下面我将介绍如何使用ajax和php上传文件。但是,这仅适用于图像附件,而我的表单是文本字段和附件的混合体。我一个人上传文本字段没有问题

这是我的附件HTML:

<!-- 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']){)时没有得到响应;
但是我得到了一个带有我需要参数though@e700867您需要使用每个参数而不是字符串化文本发布applicationFormData。请尝试以下操作:
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);
    }
});