创建FormData后
var form = new FormData();
form.append("hash", this.S.Storage.get('h_token'));
我无法将其字符串化:
JSON.stringify(form) // returns "{}"
我无法遍历它:
_.each(form, function(val){
// nope
})
我无法将其记录到控制台(带有任何有用的结果)。
console.log(form);
我还没有在JavaScript中遇到这种秘密类型。
答案 0 :(得分:3)
我无法将其字符串化
因为它是“主机对象”(由主机环境,浏览器提供),并且主机对象无法进行字符串化。
我无法循环播放
这可能意味着它没有可枚举的属性。
我无法将其记录到控制台(带有任何有用的结果)。
实际上,console.log显示了specification,.append
中定义的唯一方法。
为什么没有可枚举的属性?我不知道,但考虑到你负责填充FormData,你应该事先知道它的内容,不是吗?
答案 1 :(得分:3)
它是如此秘密,因为它只是用于将数据传递给AJAX请求,并使您不必自己编码“multipart / form-data”中的数据,就像定期提交表单时所做的那样。因此,您只应在发送AJAX请求的最后时刻使用它,而不是将其传递给其他函数。
如果您需要访问其他相同的数据,您可以传递一个简单的JS对象并编写一个简单的帮助程序,如:
function createFormData(myData) {
// It could also take an existing form for some values from the user
var formData = new FormData(/** FormElement form */);
for (var key in myData) {
formData.append(key, myData[key]);
}
return formData;
}
sendMyInfo: function(params)
// Add some data to the default params
params.hash = this.S.Storage.get('h_token'));
params.cacheBuster = (new Date()).valueOf();
// Inspect it
console.log(myData);
// Wherever you actually need FormData, create it for that purpose only....
var oReq = new XMLHttpRequest();
oReq.open("POST", "stash.php", true);
oReq.send(createFormData(myData));
};