jQuery上传文件不适用于ajax
jQuery upload file not work with ajax
我试图用下面的简单代码上传文件,但我得到了错误:
$("#register_to_buy_card").submit(function (event) {
event.preventDefault();
var $this = $(this);
var url = $this.attr('action');
var form = document.forms.namedItem($this);
var formdata = new FormData(form);
$.ajax({
url: url,
type: "POST",
dataType: "json",
data: formData,
success: function (data) {
},
error: function (data) {
}
});
});
我得到这个错误:
TypeError: Argument 1 of FormData.constructor is not an object.
var formdata = new FormData(form);
HTML:
<form id="register_to_buy_card" enctype="multipart/form-data" accept-charset="UTF-8" action="http://localhost/sample/registerToBuyCard" method="POST">
<label for="passport">Passport Image</label>
<input type="file" name="passport">
<div class="checkbox">
<button class="btn btn-default" type="submit">Submit</button>
</form>
您得到的错误是因为:
var form = document.forms.namedItem($this);
namedItem
需要一个字符串。您正在传递它var $this = $(this);
,它是一个jQuery对象。
this
已经是一个表单对象。所以改变:
var $this = $(this); var url = $this.attr('action'); var form = document.forms.namedItem($this); var formdata = new FormData(form);
至
var formdata = new FormData(this);
(是的,这四行应该替换为一行)。
然后看另一个问题,它涵盖了与错误消息没有直接关系的问题。
问题是FormData
中传递的元素不是表单,而是jQuery对象。你需要把this
的形式放在上下文中。
你需要更新这个:
var formdata = new FormData(this);
和用途:
contentType:false,
processData:false,
在ajax选项中。
更新后的代码应为:
$("#register_to_buy_card").submit(function (event) {
event.preventDefault();
var url = $(this).attr('action');
var formdata = new FormData(this); // <--------update with 'this'
$.ajax({
url: url,
type: "POST",
dataType: "json",
data: formData,
contentType:false, //<-----------required
processData:false, //<-----------required
success: function (data) {
},
error: function (data) {
}
});
});
相关文章:
- Jquery Ajax POST不工作.适用于GET
- Ajax成功回调仅适用于Chrome
- 使用ajax上传图片仅适用于png
- Ajax,Php-Postback仅适用于Firefox
- 如何在mvc中使用ajax jquery上传文件仅适用于IE9
- Javascript / Ajax适用于Mozilla firefox,但不适用于Google Chrome和IE
- 我的函数仅适用于 ajax 调用后的警报
- 从服务器读取的 ajax 文件 w3schools.com 示例适用于 IE9,但不适用于 FF12
- 如何让jQuery占位符/水印插件适用于ajax加载的文本字段
- Ajax 调用 IE8 不显示所有数据,适用于 Firefox 和 IE9
- 除了Fiddler之外,还有其他适用于IE8的ajax调试器吗
- Jquery Prepend动画只适用于AJAX一次
- Android混合应用程序:JQueryMobile ajax不适用于https,但适用于http
- Ajax函数仅适用于alert()
- 动态菜单的Ajax调用适用于first
- Jquery ajax适用于Chrome和Safari,但不适用于IE8和Firefox
- 在等待AJAX回调时更改image src:仅适用于Firefox
- Ajax php登录只适用于alert();
- Ajax适用于Firefox,但不适用于Internet Explorer-需要更新XML文件-未收到错误消息
- 对 php 服务的经过身份验证的 AJAX 请求(适用于 Wordpress)