检查formdata对象键是不是存在
Posted
技术标签:
【中文标题】检查formdata对象键是不是存在【英文标题】:Check if formdata object key exists检查formdata对象键是否存在 【发布时间】:2014-03-19 07:45:52 【问题描述】:是否可以对 formdata 对象的键进行检查?我想知道一个键是否已经被赋值。
尝试过类似的方法,结果是否定的
data=new FormData();
if(!data.key)
data.append(key,somevalue);
加法题的本质是双重赋值重写原值?
【问题讨论】:
看到这个问题:***.com/questions/7752188/… @tony 好的,我可以理解浏览器平台在安全方面所做的尝试。根据您的链接,我知道什么是合适的解决方法。为什么不举个例子,把它放在一个记录 kv 对的包装对象中,我会接受它作为参考的答案 【参考方案1】:情况正在发生变化,现在您可以使用get 函数检查密钥是否退出。
原答案
正如我们在 cmets 中讨论的那样,出于安全原因,浏览器会隐藏存储在 FormData
对象中的数据。有一种解决方法有助于在开发人员控制台中预览其数据,如下所述:FormData.append("key", "value") is not working
在代码中访问此类数据的唯一方法是使用自己的包装对象,它支持附加数据、获取值和转换为FormData
。它可能是这样的对象:
function FormDataUnsafe()
this.dict = ;
;
FormDataUnsafe.prototype.append = function(key, value)
this.dict[key] = value;
;
FormDataUnsafe.prototype.contains = function(key)
return this.dict.hasOwnProperty(key);
;
FormDataUnsafe.prototype.getValue = function(key)
return this.dict[key];
;
FormDataUnsafe.prototype.valueOf = function()
var fd = new FormData();
for(var key in this.dict)
if (this.dict.hasOwnProperty(key))
fd.append(key, this.dict[key]);
return fd;
;
FormDataUnsafe.prototype.safe = function()
return this.valueOf();
;
用法:
var xhr = new XMLHttpRequest;
xhr.open('POST', '/', true);
xhr.send(data.safe()); // convertion here
Demo
【讨论】:
为处于相同情况的人提供更多见解。推荐的解决方案是以某种形式记录您输入的内容(答案以包装对象的形式进行)。并使用该参考来说明您已经输入的内容,因此如果密钥已经存在 至少,我可以检查formdata
对象里面是否有文件吗?
您能否提供一些有关“由于安全原因,浏览器隐藏存储在 FormData 对象中的数据”的详细信息。即使首选链接。
@PageYe 这个答案已经很老了,从那时起很多事情都发生了变化,所以现在看来它不再是一个安全问题了。
@Tony 我只是想知道为什么浏览器应该隐藏数据而不是直接显示属性?以上是关于检查formdata对象键是不是存在的主要内容,如果未能解决你的问题,请参考以下文章