如何获取FormData对象的长度

时间:2015-01-21 16:52:20

标签: jquery ajax

我正在使用ajax上传文件。 要传递和保存数据我正在使用FormData对象。 我想显示FormData对象的长度,但我不能这样做。

我试过这种方式

 var data = new FormData();
 jQuery.each($(this)[0].files, function(i, file) {
     data.append('img['+i+']', file);
 });

 /* FIRST */
 var getObjectSize = function(obj) {
    var leng = 0, key;
    for (key in obj) {
      if (obj.hasOwnProperty(key)) leng++;
    }
    return leng;
 };
 var items = getObjectSize(data);
 alert(items); // output 0

 /* SECOND */
 var items = Object.keys(data).length;
 alert(items); // output 0

我该怎么做?感谢。

3 个答案:

答案 0 :(得分:0)

当您使用console.log(formData),

时,Formdata看起来像这样
FormData {
     append: function
 }
 __proto__: FormDataappend: function append() {
     [native code]
 }
 arguments: nullcaller: nulllength: 2name: "append"
 __proto__: function Empty() {}
 apply: function apply() {
     [native code]
 }
 arguments: nullbind: function bind() {
     [native code]
 }
 call: function call() {
     [native code]
 }
 caller: nullconstructor: function Function() {
     [native code]
 }
 length: 0name: "Empty"
 toString: function toString() {
     [native code]
 }
 __proto__: Object < function scope > < function scope > Global: Windowconstructor: function FormData() {
     [native code]
 }
 __proto__: Object__defineGetter__: function __defineGetter__() {
     [native code]
 }
 __defineSetter__: function __defineSetter__() {
     [native code]
 }
 __lookupGetter__: function __lookupGetter__() {
     [native code]
 }
 __lookupSetter__: function __lookupSetter__() {
     [native code]
 }
 constructor: function Object() {
     [native code]
 }
 hasOwnProperty: function hasOwnProperty() {
     [native code]
 }
 isPrototypeOf: function isPrototypeOf() {
     [native code]
 }
 propertyIsEnumerable: function propertyIsEnumerable() {
     [native code]
 }
 toLocaleString: function toLocaleString() {
     [native code]
 }
 toString: function toString() {
     [native code]
 }
 valueOf: function valueOf() {
     [native code]
 }
 get __proto__: function __proto__() {
     [native code]
 }
 set __proto__: function __proto__() {
     [native code]
 }

因此,无法查询已存储到FormData的数据。并且,official document提到了相同的内容。

所以,而不是为什么不通过直接计算文件号来获取长度

var length=$(this).get(0).files.length

P.S:你可以通过question/answer获得更多细节。

答案 1 :(得分:0)

  

以下是 Drag and Drop files into FormData 的概念验证代码,并通过POST上传到服务器。它包含一个在上载之前检查文件大小的简单示例。我还制作了一个JS Bin,您可以在其中进行实验,看看FormData对象中的数据是否有用。

答案 2 :(得分:0)

也许你可以使用它:

value