【问题标题】:Check if formdata object key exists检查formdata对象键是否存在
【发布时间】:2014-03-19 07:45:52
【问题描述】:

是否可以对 formdata 对象的键进行检查?我想知道一个键是否已经被赋值。

尝试过类似的方法,结果是否定的

data=new FormData();
if(!data.key)
data.append(key,somevalue);

加法题的本质是双重赋值重写原值?

【问题讨论】:

  • @tony 好的,我可以理解浏览器平台在安全方面所做的尝试。根据您的链接,我知道什么是合适的解决方法。为什么不举个例子,把它放在一个记录 kv 对的包装对象中,我会接受它作为参考的答案

标签: javascript ajax html forms jquery-ui


【解决方案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 我只是想知道为什么浏览器应该隐藏数据而不是直接显示属性?
猜你喜欢
  • 2013-09-26
  • 2020-06-18
  • 2021-11-25
  • 2019-11-12
  • 2014-01-15
相关资源
最近更新 更多