检查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对象键是不是存在的主要内容,如果未能解决你的问题,请参考以下文章

检查 JavaScript 对象中是不是存在键?

检查对象中是不是存在键[重复]

如何检查浏览器是不是支持 HTML5 文件上传(FormData 对象)?

检查对象数组中是不是存在具有特定键值的对象

如何检查 JSON 对象数组中是不是存在键

检查jquery的对象中是不是存在键