在 AJAX 中将数据与 FormData 一起作为一个对象发送

我正在尝试将 JSON 数组中的 FormData 传递给 AJAX 脚本:


    $('#form').submit(function(e)

    {

        e.preventDefault();


        let formData = new FormData(this),

            data = {'action': 'insert', 'data': formData};


        $.ajax({

            data: data,

            url: '/wp-content/plugins/eng-dealer-map/bin/Admin.php',

            type: 'post',

            cache: false,

            contentType: false,

            processData: false,

            success: function(res) {console.log(res)},

            error: function(res) {console.log(res)}

        })

    });

    然后 /bin/Admin.php


    <?php

        ini_set('display_errors',1);

        ini_set('display_startup_errors',1);

        error_reporting(-1);


        $ds = DIRECTORY_SEPARATOR;


        require_once $_SERVER['DOCUMENT_ROOT']. $ds. 'wp-content'. $ds. 'plugins'. $ds. 'eng-dealer-map'. $ds. 'vendor'. $ds. 'autoload.php';


        var_dump($_POST);

        $admin = new \App\Endpoint\Admin(['action' => $_POST['action'], 'data' => $_POST['data']]);

        echo $admin->execute();

    反过来,最终进入这个(缩小的)类:


    <?php

        namespace App\Endpoint;


        class Admin

        {

            protected $db;

            protected $table;


            protected $sql;

            protected $data;


            public function __construct($foo)

            {


    不幸的是,它似乎$_POST在途中迷路了。在我的 JS 中添加这个:


    for (let pair of formData.entries())

    {

        console.log(pair[0]+ ', ' + pair[1]);

    }

    它正确显示了我的数据。然后我var_dump($_POST)在bin/Admin.php其中显示了一个空数组。


    我改为'data': formData所以'data': 'hello, world'我感觉 FormData 不喜欢与其他元素一起在 JSON 数组中?


    那么如何将带有其他元素的 FormData 发送到我的 AJAX 脚本呢?我知道我可以使用:


    formData.append('action', 'action-value')

    但是当它可以作为一个对象发送到我的脚本时,感觉就像是一个额外的步骤。


    我也尝试过使用JSON.stringifyonformData但又没有。有没有一种方法可以在不使用的情况下将 formData与其他数据一起作为一个对象发送.append()?还是这是我唯一的选择?


SMILET
浏览 167回答 1
1回答

凤凰求蛊

我有一种感觉 FormData 不喜欢与其他元素一起在 JSON 数组中?正确的。您不能将 FormData 转换为 JSON。那么如何将带有其他元素的 FormData 发送到我的 AJAX 脚本呢?将额外的数据添加到 FormData。我知道我可以使用:formData.append('action',&nbsp;'action-value')是的,这样做。但是当它可以作为一个对象发送到我的脚本时,感觉就像是一个额外的步骤。FormData对象是一个对象。您只需将数据添加到其中,而不是将数据添加到不同的对象,然后尝试从中添加数据FormData。
打开App,查看更多内容
随时随地看视频慕课网APP