我正在尝试将 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()?还是这是我唯一的选择?
凤凰求蛊