1. ホーム
  2. javascript

[解決済み] FormDataに配列を追加し、AJAXで送信する。

2022-04-28 04:56:52

質問

配列、テキストフィールド、ファイルを含むマルチパートフォームを送信するためにajaxを使用しています。

メインデータに各VARを以下のように追加します。

var attachments = document.getElementById('files'); 
var data= new FormData();

for (i=0; i< attachments.files.length; i++){
    data.append('file', attachments.files[i]);
    console.log(attachments.files[i]);

    data.append ('headline', headline);
    data.append ('article', article);
    data.append ('arr', arr);
    data.append ('tag', tag);

その後、ajax関数を使ってPHPファイルに送信し、SQL DB内に格納します。

$.ajax({    
    type: "post",
    url: 'php/submittionform.php',
    cache: false,
    processData: false,
    contentType: false,
    data: data,
    success: function(request) {$('#box').html(request); }
})

しかし、PHP側では arr 変数は、配列でありながら文字列として表示されます。

フォームデータとしてajaxで送らず、単純に $.POST オプションを使用すると、PHP側で配列として取得することができますが、その場合、ファイルを送信することができません。

何か解決策はありますか?

解決方法は?

いくつかの選択肢があります。

JSON文字列に変換し、PHPでパースする(推奨)。

JS

var json_arr = JSON.stringify(arr);

PHP

$arr = json_decode($_POST['arr']);


または キュリオスの方法

を介して配列を送信します。 FormData .


推奨しません。でデータをシリアライズし、PHPでデシリアライズする。

JS

// Use <#> or any other delimiter you want
var serial_arr = arr.join("<#>"); 

PHP

$arr = explode("<#>", $_POST['arr']);