Saya Mencoba mengunggah gambar dengan jquery dan ajax. Tapi hal aneh terjadi disini. Di konsol Log acaranya
TypeError: 'append' dipanggil pada objek yang tidak mengimplementasikan antarmuka FormData.
Tolong beritahu saya apa yang saya lakukan salah di sini?
Skrip 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
}
});
});
Markup HTML saya
<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>
Jawaban:
untuk menggunakan formdata dengan jquery Anda harus mengatur opsi yang benar
$.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 } });
referensi .ajax
sumber
postData.append("name",value);
{cat:"meow",dog:"bark"}
:, Anda harus menggunakan JSON.stringify terlebih dahulu:postData.append("name",JSON.stringify(someObject));
dan mengurai json di ujung servercache: false
Ini memberi saya masalah sekarang. Dengan semuanya sudah diperbaiki.Tambahkan dua parameter ini di AJAX Anda untuk menyelesaikan masalah Anda:
processData: false, contentType: false,
sumber
cache: false
Ini memberi saya masalah sekarang. Dengan semuanya sudah diperbaiki.cache: false
?GET
permintaan. Tidakcache:false
akan berfungsi dengan baik untukPOST
permintaan. Seperti yang Anda sebutkan dalam komentar di atas, ini hanya berfungsi untukHEAD
danGET
permintaan. DanFormData
digunakan untuk mengirimkan formulir data yang seharusnya menjadiPOST
bukanGET
. Jadi saya sarankan Anda selalu menggunakan POST untuk mengirimkan data formulir.Anda harus mengatur parameter ini di panggilan ajax:
enctype: 'multipart/form-data'
sumber
Menambahkan:
processData: false, contentType: false,
pasti akan membantu dengan file tersebut, selain itu adalah jika Anda melakukan segala jenis kesalahan lewat atau pesan sukses kembali ke halaman, Anda akan ingin menggunakan json untuk membuat hidup Anda lebih mudah.
contoh:
dataType: 'json',
ini akan membantu mengurai tanggapan Anda. Tanpa itu, itu akan membuat kesalahan.
sumber
Cukup edit baris Anda:
var postData = new FormData(this);
untuk:
var postData = new FormData($(this));
sumber