2016-09-19 13 views
1

私は以下のformDataを使用して結果を渡します。しかし、ユーザーが複数回データを複製すると、データは複製されます。だから私は任意の値を追加する前にformDataをクリア/リセットする必要があります。javascriptを使用してformData()をクリア/リセットします

私はf.name = ''のように1つずつ行うことができます。私にはたくさんのキーがあります。問題を解決するためのより良い方法はありますか?

$('input').change(function(){ 
// Create a new formdata but at first have to clear/reset it 
var fd = new FormData(); 
var f = $.canvasResize('dataURLtoBlob', data); 
f.name = file.name; 
fd.append($('#area input').attr('name'), f); 
}) 
+0

結果をクリアできないと思います。 この関数を実行した後に –

答えて

2

それとも、あなたのいるFormDataからあなたの鍵を削除しないであろうenteriesとgurvinder372の答え@delete方法

var entries = formData.entries(); 
for(var pair of entries) 
{ 
    formData.delete(pair[0]); 
} 
+0

を再作成する必要があります.fd.appendはfd.appendが関数ではないということです。 Hmm –

+0

@MariaJaneああ、それが機能かどうかをチェックすることができます。更新を確認する – gurvinder372

+0

割り当てに左手が無効 –

2

を使用して

function clearFormData(fd) 
{ 
    for(var prop in fd) 
    { 
    if (typeof fd[ prop ] != "function") 
    { 
     fd[ prop ] = ""; 
    } 
    } 
} 

別のアプローチを行うことによって、それをFormDataをクリアすることができます空の文字列に設定します。空の文字列は、同じサーバー側ではありません。
たとえば、PHPでif (isset($_POST["yourKey"]))は引き続きtrueに評価されます。


最高crossbrowserの方法は、残念ながらあなたの状況に新しいいるFormDataオブジェクトを作成することです。それは現在だけクロームでサポートされていても

fd = new FormData(); 

他の可能性は、> = 50のFirefox> = 39は、formData.set()メソッドを使用することです。
これは、setキーの値を置き換えるか、そのようなキーがない場合は追加します。

var formData = new FormData(); 
formData.append('yourKey', yourValue); 

for (var key of formData.keys()) { 
    // here you can add filtering conditions 
    formData.delete(key) 
    }); 
:> = 50と のFirefox> = 44、あなたがいるFormDataオブジェクトの for .. of formData.keys()deleteメソッドを使用することができます今すぐ


Chromeで、質問のタイトルに答えるために

またはそのforEachメソッドでも(明らかに同じブラウザのサポートが不十分であるとします)

var formData = new FormData(); 
formData.append('yourKey', yourValue); 

formData.forEach(function(val, key, fD){ 
    // here you can add filtering conditions 
    formData.delete(key) 
    }); 
+0

formDataは新しい技術ではありませんが、簡単に解決するソリューションはありませんか?だから人々が普通にやっているのは、ページをハードにリロードすることだけです。 –

+0

for of'?それは 'のために'であるべきですか? –

+0

@MariaJane、私はあなたの質問の一部を見逃していたので、実際には、あなたのケースではavailbaleを使用すると 'fd.set()'を使うべきです。 ['for ... of'](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/for...of)はES6の構文であり、反復可能なオブジェクトをループします。 'FormData.keys()'はIteratorオブジェクトを返します。したがって、このループを使用する必要があります。いいえ、人々はページを再読み込みしないで、新しいオブジェクト( 'alreadyReferencedFormData = new FormData();')を作成するだけです。そして、はい、この技術はまだ活発に開発されており、近い将来、より多くのUAがそれを完全に実装するときに変更される可能性があります – Kaiido

関連する問題