2014-02-19 65 views
5

是否有可能運行的FORMDATA對象的關鍵支票?我想知道一個鍵是否已被賦值。檢查FORMDATA對象鍵存在

試過這樣的事情,結果爲陰性

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

另外的問題是雙重任務的性質改寫原來的價值?

+0

看到這個問題:http://stackoverflow.com/questions/7752188/formdata-appendkey-value-是 - 不工作 – Tony

+0

@tony好吧,我能體會到什麼瀏覽器平臺正在嘗試與安全做我有什麼會根據周圍把你的鏈接的一個合適的工作的想法。爲什麼不爲什麼不給把它在記錄KV對包裝物的一個例子,我會接受它作爲參考 –

回答

3

事情正在發生變化,現在你可以使用,如果get功能鍵退出檢查。

原來的答覆

正如我們在評論中已經討論過,瀏覽器隱藏存儲在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

+0

對於那些在同樣的情況多一點洞察力的答案。推薦的解決方案是以某種形式或其他形式記錄您輸入的內容(回答以包裝對象的形式進行)。並使用該引用來說出你已經放入的內容,因此如果密鑰已經存在 –

+0

至少,我可以檢查'formdata'對象是否有內部文件? – MarceloBarbosa

+0

您能否提供一些關於「由於安全原因存儲在FormData對象中的瀏覽器隱藏數據」的細節。即使鏈接是首選。 – PageYe