表单数据在发送后未被处理程序检索

Form data not being retrieved by handler after it is sent

我正在尝试通过 ajax 将图像发送到 ajax 处理程序。如果我 console.log 我发送的变量 ìmage,它看起来很好。截至目前,我正在将其发送给处理程序并尝试将其回显。但我得到一个空白的回应。我正在将 image: formData 发送到我希望没问题的对象中。

Ajax:

var form_data = new FormData();

              var image = $('#newImage').prop('files')[0];
              var image_name = image.name;
              var image_extension = image.name.split('.').pop().toLowerCase();
              if(jQuery.inArray(image_extension, ['gif', 'jpg', 'JPG', 'pjpeg', 'x-png', 'png', 'PNG', 'jpeg']) == -1) {
                alert("Invalid Image File Type")
              }
              var image_size = image.size;
              if(image_size > 700000) {
                alert("Image too big!");
              } else {
                form_data.append('file', image);
              }


              let data = {
                action: 'NewEventExhibition',
                name: name,
                description: description,
                notes: notes,
                status: status,
                slug: slug,
                start_date: start_date,
                end_date: end_date,
                event_code: '<?=$code?>',
                image: form_data
              };

              $.ajax({
                url: '/modules/ajax/ajax_handler.php',
                type: 'POST',
                data: data,
                contentType: false,
                cache: false,
                processData: false,
                mimeType: 'multipart/form-data',
                success: function(response) {
                  alert(response);
                },
                fail: function(response) {
                  console.log(response);
                }
              })
            }
          });

处理程序

if($_FILES['file']['name'] != '') {
          $test = explode(".", $_FILES['file']['name']);
          $extension = end($test);
          $name = rand(100, 999).'.'.$extension;
          $location = "/assets/images/".$name."";
          move_uploaded_file($_FILES['file']['tmp_name'], $location);
          echo $location;
        }
```

这不是您使用 ajax 发送 FormData 对象的方式。 form_data 对象应该是您发送的对象,而不是更大对象的一部分。 我建议您将对象 data 的所有字段附加到 form_data 并发送它。

类似于以下内容:

form_data.append('action', 'NewEventExhibition');
form_data.append('name', name);
form_data.append('description', description);
form_data.append('notes', notes);
form_data.append('status', status);
form_data.append('slug', slug);
form_data.append('start_date', start_date);
form_data.append('end_date', end_date);
form_data.append('event_code', '<?=$code?>');

而不是 let data = { .... }

然后你可以用

发送
$.ajax({
  url: '/modules/ajax/ajax_handler.php',
  type: 'POST',
  data: form_data,
  contentType: false,
  cache: false,
  processData: false,
  mimeType: 'multipart/form-data',
  success: function(response) {
    alert(response);
  },
  fail: function(response) {
    console.log(response);
  }
});

请注意data: form_data