156

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 を Form データとして送信せずに単純な$.POSTオプションを使用すると、PHP 側で配列として取得できますが、ファイルも送信できません。

解決策はありますか?

4

13 に答える 13

334

FormData次の方法で配列を送信することもできます。

var formData = new FormData;
var arr = ['this', 'is', 'an', 'array'];

for (var i = 0; i < arr.length; i++) {
  formData.append('arr[]', arr[i]);
}

console.log(...formData);

arr[]そのため、単純な HTML フォームで行うのと同じ方法で記述できます。PHPの場合、動作するはずです。

次の記事が役に立つかもしれません:クエリ文字列内で配列を渡すには?

于 2015-02-10T14:59:16.603 に答える
135

いくつかのオプションがあります:

JSON 文字列に変換してから、PHP で解析します (推奨)。

JS

var json_arr = JSON.stringify(arr);

PHP

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

または@Curiosの方法を使用してください

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


非推奨: データをシリアル化し、PHP で逆シリアル化します。

JS

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

PHP

$arr = explode("<#>", $_POST['arr']);
于 2013-04-19T11:59:51.100 に答える
5

すべての型入力を FormData に追加する

const formData = new FormData();
for (let key in form) {
    Array.isArray(form[key])
        ? form[key].forEach(value => formData.append(key + '[]', value))
        : formData.append(key, form[key]) ;
}
于 2018-10-25T09:01:08.677 に答える
0

私の場合、私は得ました

{
    "category": [
        "Incorrect type. Expected pk value, received str."
    ]
}

エラー

React (フロントエンド) と Django DRF (バックエンド) を使用する人:


const category = [1,2,3,4,5]
formData.append("category", JSON.stringify(category));

import json
from .serializers import ArticleSerializer
from rest_framework.response import Response

class ArticleListCreateView(ListCreateAPIView):
    permission_classes = (
        IsSuperuserOrReadOnly,
        IsAutherOrReadOnly,
    )
    serializer_class = ArticleSerializer
    model = Article
    queryset = Article.objects.filter(article_honor='a', status='p')


    def create(self, request, *args, **kwargs):
        data = request.data
        article = Article('set all argumenst')
        
        image = request.data['image']
        # save image in local

        article.save()
        categorys = json.loads(data['category'])
        for catID in categorys:
            cat = Category.objects.get(id=catID)
            article.category.add(cat)

        article.save()

        return Response(ArticleSerializer(article).data)


于 2022-02-01T12:38:11.603 に答える