2014-02-19 2 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

관련 문제