4

jQuery を使用して、追加データで AJAX アップロードを行っています。Stackoverflow コード 私はこれに従っています ファイルを非同期的にアップロードするにはどうすればよいですか? 私が使用しているコードは次のとおりです。

var formData = new FormData($('form')[0]);
                $.ajax({
                    type: "POST",
                    url: "ajax/register.php",
                    dataType: "text",
                    data: {
                        name: $("#name").val(),
                        city: $("#city").val(),
                        image: formData
                    },
                    success: function(text) {
                        if(text == "data ok pic ok") { window.location = "reg3.php"; }
                        else { errorMessage(text); }
                    },
                    cache: false,
                    contentType: false,
                    processData: false
                });
            });

問題は、次のようなファイル関連のコードを削除すると、

var formData = new FormData($('form')[0]);
image: formData
cache: false,
contentType: false,
processData: false

その後、コードが機能し、「名前」や「都市」などの他のデータも送信できます。ファイル関連のコードを元に戻すと、動作が停止し、コンソールにエラーはなく、サーバー上の PHP スクリプトからのアクションもありません (他の関連データを受信しなかったように)。

何か案は?

前もって感謝します。

4

2 に答える 2

5

ファイルを送信するフォームを作成するときは、POSTメソッドとmultipart/form-dataエンコーディングを指定します。<input>HTMLコードのそれぞれはpart、HTTPリクエスト本文のブラウザによって変換されるため、複数のファイルと文字列を同時に送信できます。これがFormDataのドキュメントです(ページの一番下を参照)。基本的に使用する必要があります

var data = new FormData($('form')[0]);
data.append("name",  $("#name").val());
data.append("city",  $("#city").val());

// ...

$.post({
  "ajax/register.php",
  data: data,
  processData: false,  // tell jQuery not to process the data
  contentType: false   // tell jQuery not to set contentType
});

オブジェクトは、キーFormDataに直接割り当てられることを目的としていdataます。オブジェクトに追加のフィールドを追加しFormDataます。これはバイナリコンテンツを表していません。代わりに、名前と値のペアのデータ構造であり、キーは常に文字列であり、値は文字列またはバイナリオブジェクトにすることができます。

于 2012-09-30T13:35:41.397 に答える
0

追加してみてください: enctype: 'multipart/form-data'

例えば

            {
                type: "POST",
                url: "ajax/register.php",
                dataType: "text",
                enctype: 'multipart/form-data',
                data: {
                    name: $("#name").val(),
                    city: $("#city").val(),
                    image: formData
                }
            }
于 2012-09-30T13:31:59.837 に答える