Php 带有文件上传的AJAX post表单

Php 带有文件上传的AJAX post表单,php,html,jquery,ajax,forms,Php,Html,Jquery,Ajax,Forms,我有一个我似乎无法解决的问题,当然这是一个noob问题,但现在它发生了,我试图通过过去的值和上传文件使用相同的形式,但文件没有传递到php函数 我的html与ajax: <form name="create_batch" method="post" role="form"> <input type="hidden" name="token" value="<?= \Middlewares\Csrf::get() ?>" required="required"

我有一个我似乎无法解决的问题,当然这是一个noob问题,但现在它发生了,我试图通过过去的值和上传文件使用相同的形式,但文件没有传递到php函数

我的html与ajax:

<form name="create_batch" method="post" role="form">
   <input type="hidden" name="token" value="<?= \Middlewares\Csrf::get() ?>" required="required" />
   <input type="hidden" name="request_type" value="create" />
   <input type="hidden" name="project_id" value="<?= $data->project->project_id ?>" />
   <input type="hidden" name="type" value="batch" />

   <div class="notification-container"></div>

   <div class="form-group">
      <label><i class="fa fa-fw fa-signature fa-sm mr-1"></i> <?= $this->language->create_link_modal->input->location_url ?></label>
   <input type="text" class="form-control" name="location_url" required="required" placeholder="<?= $this->language->create_link_modal->input->location_url_placeholder ?>" />
   </div>
   <div class="form-group">
     <input type="file" name="file">
   </div>
   <div class="form-group">
      <label><i class="fa fa-fw fa-link"></i> <?= $this->language->create_link_modal->input->url ?> 
      </label>
      <input type="text" class="form-control" name="url" placeholder="<?= $this->language->create_link_modal->input->url_placeholder ?>" />
   </div>
   <div class="text-center mt-4">
      <button type="submit" name="submit" class="btn btn-primary"><?= $this->language->create_link_modal->input->submit ?></button>
   </div>
</form>
<script>
    $('form[name="create_batch"]').on('submit', event => {

        $.ajax({
            type: 'POST',
            url: 'link-ajax',
            data: $(event.currentTarget).serialize(),
            success: (data) => {
                if(data.status == 'error') {

                    let notification_container = $(event.currentTarget).find('.notification-container');

                    notification_container.html('');

                    display_notifications(data.message, 'error', notification_container);

                }

                else if(data.status == 'success') {

                    /* Fade out refresh */
                    fade_out_redirect({ url: data.details.url, full: true });

                }
            },
            dataType: 'json'
        });

        event.preventDefault();
    })
</script>


为了发送多部分表单数据,您需要创建并发送表单数据对象

见下例-

                 var formdata = new FormData($('#formId')[0]);
                    $.ajax({
                        url: URL,
                        type: 'POST',
                        dataType: 'json',
                        async: false,
                        cache: false,
                        contentType: false,
                        processData: false,
                        data: formdata,
                        success: function (response) {
                            $('#responseMsg').html(response.msg);
                        }
                    });
在服务器端,您可以通过
$\u POST
获取数据,通过
$\u files

解决方案获取文件

    $("form#create_batch").submit(function(e) {
    e.preventDefault();
    var formData = new FormData(this);

    $.ajax({
        url: 'link-ajax',
        type: 'POST',
        data: formData,
        dataType: 'json',
        success: (data) => {
                if(data.status == 'error') {

                    let notification_container = $(event.currentTarget).find('.notification-container');

                    notification_container.html('');

                    display_notifications(data.message, 'error', notification_container);

                }

                else if(data.status == 'success') {

                    /* Fade out refresh */
                    fade_out_redirect({ url: data.details.url, full: true });

                }
            },
        cache: false,
        contentType: false,
        processData: false
    });
});
    $("form#create_batch").submit(function(e) {
    e.preventDefault();
    var formData = new FormData(this);

    $.ajax({
        url: 'link-ajax',
        type: 'POST',
        data: formData,
        dataType: 'json',
        success: (data) => {
                if(data.status == 'error') {

                    let notification_container = $(event.currentTarget).find('.notification-container');

                    notification_container.html('');

                    display_notifications(data.message, 'error', notification_container);

                }

                else if(data.status == 'success') {

                    /* Fade out refresh */
                    fade_out_redirect({ url: data.details.url, full: true });

                }
            },
        cache: false,
        contentType: false,
        processData: false
    });
});