【问题标题】:$_POST values are available but cannot be accessed$_POST 值可用但无法访问
【发布时间】:2019-01-05 07:06:34
【问题描述】:

我尝试通过 AJAX 提交表单,然后使用这些值。 这是表单的标记:

<form id="formDeb" action="controller/processDeb.php" method="POST" enctype="multipart/form-data">
    <div class="row">
        <div class="col-md-6">
            <div class="form-group">
                <label for="formGroupName">Angezeigter Name in Cydia/Sileo</label>
                <input type="text" class="form-control" id="formGroupName" name="formGroupName"
                       placeholder="Vorname Nachname oder K&uuml;rzel">
            </div>
        </div>
        <div class="col-md-6">
            <div class="form-group">
                <label for="formGroupMail">Deine E-Mail Adresse</label>
                <input type="email" class="form-control" id="formGroupMail" name="formGroupMail"
                       placeholder="Deine E-Mail Adresse">
            </div>
        </div>
    <!-- and more fields --> 
</form>

我通过 Ajax 提交表单:

var myFormData = new FormData(this);
var supportedDevices = getSelectedBoxes("devices");
var supportedVersions = getSelectedBoxes("iosversions");

myFormData.append("supportedDevices", supportedDevices);
myFormData.append("supportedVersions", supportedVersions);

$.ajax({
    type: method,
    url: targetUrl,
    data: myFormData,
    processData: false,
    async: true,
    beforeSend: function () {
       isSubmitting = true;

       $btnSubmit.attr('disabled', 'true');
       $btnImg.toggle();
       $btnLoader.toggle();
     }
})

在 processDeb.php 文件中我有这个代码:

if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (is_array($_POST)) {
    echo '<pre>' . var_export($_POST, true) . '</pre>';
    $name = $_POST['cName'] ?? '';
    $mail = $_POST['cMailAddress'] ?? '';
}

应该设置值,但是当我尝试访问$name 或$mail 时,内容是''。

var_export 的输出如下:

数组 ( '------WebKitFormBoundaryMBXZo8GpgumN5Etl Content-Disposition:_form-data;_name' => '"formGroupName"

好听的名字 ------WebKitFormBoundaryMBXZo8GpgumN5Etl Content-Disposition: form-data; name="formGroupMail"

mail@domain.tld

所以应该可以使用$_POST['formGroupName'] 访问这些值,但这是不可能的。

enctype 设置为multipart/form-data,因为还有一些上传字段供用户使用。

【问题讨论】:

    标签: php


    【解决方案1】:

    默认情况下,jQuery 将在 application/x-www-form-urlencoded; charset=UTF-8 的 Ajax 请求上设置 Content-Type,这在您发送多部分数据时是错误的。

    添加

    contentType: false
    

    ... 传递给 $.ajax() 的选项,这样 jQuery 就不会覆盖 XMLHttpRequest 的默认行为(即从 FormData 对象生成 Content-Type)。

    【讨论】:

      猜你喜欢
      • 2015-09-16
      • 1970-01-01
      • 2019-09-16
      • 2015-09-25
      • 1970-01-01
      • 2015-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多