我正在尝试用jquery和ajax上传图像。但是奇怪的事情发生了。在控制台日志中显示
请告诉我我哪里做错了?<TypeError: 'append'在未实现的对象上被调用接口FormData。
JS脚本/strong>
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
}
});
});
My HTML Markup
<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)
类型:布尔
默认情况下,传入数据将data选项作为对象(从技术上讲,除了字符串)将被处理并转换为查询字符串,拟合到默认的内容类型"application/x-www-form-urlencoded"。如果如果你想发送一个DOMDocument,或者其他未处理的数据,设置这个选项为false。
在AJAX中添加以下两个参数来解决问题:
processData: false,
contentType: false,
添加:
processData: false,
contentType: false,
肯定会对文件有帮助,除此之外,如果你正在做任何类型的传递错误或成功消息回页面,你会想要使用json来使你的生活更容易。
的例子:
dataType: 'json',
这将有助于解析您的响应。如果没有,它将抛出一个错误。
您必须在ajax调用中设置此参数:
enctype: 'multipart/form-data'
或者您可以尝试更改:
data : postData,
data : postData.entries(),
编辑你的行:
var postData = new FormData(this);
:
var postData = new FormData($(this));