1. ホーム
  2. javascript

[解決済み] FormData インターフェースを実装していないオブジェクトに対して 'append' を呼び出す

2022-11-25 08:40:49

質問

jqueryとajaxで画像をアップロードしようとしています。しかし、奇妙なことがここで起こった。コンソールログに表示されている

TypeError: 'append' は実装されていないオブジェクトで呼び出されました。 インターフェイスFormDataを実装していないオブジェクトで呼び出されました。

私はここで何が間違っていたのか教えてください。

JSスクリプト

var prosrc=$("#pro_pix img").last().attr("src");
$("#logoform").on('change',function(event){
var postData = new FormData(this);
$("#pro_pix img").last().hide();
$("#pro_pix img").first().show();
event.preventDefault();
$.ajax(
    {
        url : "/function/pro_pic_upload.php",
        type: "POST",
        data : postData,
        success:function(data, textStatus, jqXHR)
        {
        $("#pro_pix img").last().show();
        $("#pro_pix img").first().hide();
        $("#pro_pix h6").text(data);
        },
        error: function(jqXHR, textStatus, errorThrown)
        {
            //if fails     
        }
    });
});

私のHTMLマークアップ

 <div class="row">
    <!-- left column -->
    <div id="pro_pix" class="col-md-4 col-sm-6 col-xs-12">
      <div class="text-center">
        <img src="template/image/725.GIF" class="avatar img-circle img-thumbnail" style="display:none" alt="avatar">
        <img src="<?php echo $rowuser['profile_logo']; ?>" class="avatar img-circle img-thumbnail" alt="avatar">
        <h6>Upload a different photo...</h6>
        <form role="form" id="logoform" enctype="multipart/form-data">
        <input id="logo" name="logo" type="file" class="text-center center-block well well-sm">
        </form>
      </div>
    </div>

どのように解決するのですか?

jqueryでformdataを使用するには、正しいオプションを設定する必要があります。

$.ajax({
    url : "/function/pro_pic_upload.php",
    type: "POST",
    data : postData,
    processData: false,
    contentType: false,
    success:function(data, textStatus, jqXHR){
        $("#pro_pix img").last().show();
        $("#pro_pix img").first().hide();
        $("#pro_pix h6").text(data);
    },
    error: function(jqXHR, textStatus, errorThrown){
        //if fails     
    }
});

.ajaxの参照

processData (デフォルト: true)

タイプ ブール値

デフォルトでは、データオプションに渡されるデータは にオブジェクトとして渡されたデータ (技術的には として渡されたデータは、処理されてクエリー文字列に変換されます。 デフォルトのコンテントタイプである "application/x-www-form-urlencoded" に適合するように処理され、クエリー文字列に変換されます。もし DOMDocument やその他の非処理データを送信したい場合は、このオプションを オプションを false に設定してください。