1. What is FormData
FormData is a new interface introduced by HTML5 in the Web API.
Most of us have ever intercepted or edited data when submitting forms with Jquery. FormData is a Web API interface that provides a different approach to form handling. Using FormData is the same as using ajax jquery.
2. How to use the Data form
2.1. .append ()
Insert key-value pairs into the form data. Just like we insert hidden_field input into a regular form.
1 2 3 4 | <span class="token keyword">var</span> formData <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">FormData</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// Currently empty</span> formData <span class="token punctuation">.</span> <span class="token function">append</span> <span class="token punctuation">(</span> <span class="token string">'username'</span> <span class="token punctuation">,</span> <span class="token string">'Chris'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> formData <span class="token punctuation">.</span> <span class="token function">append</span> <span class="token punctuation">(</span> <span class="token string">'userpic'</span> <span class="token punctuation">,</span> myFileInput <span class="token punctuation">.</span> files <span class="token punctuation">[</span> <span class="token number">0</span> <span class="token punctuation">]</span> <span class="token punctuation">,</span> <span class="token string">'chris.jpg'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
2.2 .delete ()
Delete the key-value pair in the FormData Object
1 2 3 4 | <span class="token keyword">var</span> formData <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">FormData</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// Currently empty</span> formData <span class="token punctuation">.</span> <span class="token function">append</span> <span class="token punctuation">(</span> <span class="token string">'username'</span> <span class="token punctuation">,</span> <span class="token string">'Chris'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> formData <span class="token punctuation">.</span> <span class="token function">append</span> <span class="token punctuation">(</span> <span class="token string">'userpic'</span> <span class="token punctuation">,</span> myFileInput <span class="token punctuation">.</span> files <span class="token punctuation">[</span> <span class="token number">0</span> <span class="token punctuation">]</span> <span class="token punctuation">,</span> <span class="token string">'chris.jpg'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
2.3 Loop through key-values with entries
We can loop through the key-values of FormData with entries
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <span class="token comment">// Create a test FormData object</span> <span class="token keyword">var</span> formData <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">FormData</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> formData <span class="token punctuation">.</span> <span class="token function">append</span> <span class="token punctuation">(</span> <span class="token string">'key1'</span> <span class="token punctuation">,</span> <span class="token string">'value1'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> formData <span class="token punctuation">.</span> <span class="token function">append</span> <span class="token punctuation">(</span> <span class="token string">'key2'</span> <span class="token punctuation">,</span> <span class="token string">'value2'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// Display the key/value pairs</span> <span class="token keyword">for</span> <span class="token punctuation">(</span> <span class="token keyword">var</span> pair <span class="token keyword">of</span> formData <span class="token punctuation">.</span> <span class="token function">entries</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> pair <span class="token punctuation">[</span> <span class="token number">0</span> <span class="token punctuation">]</span> <span class="token operator">+</span> <span class="token string">', '</span> <span class="token operator">+</span> pair <span class="token punctuation">[</span> <span class="token number">1</span> <span class="token punctuation">]</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">// Result</span> key1 <span class="token punctuation">,</span> value1 key2 <span class="token punctuation">,</span> value2 |
2.4 .get ()
Get the first value of the formdata corresponding to the key
1 2 3 4 5 | <span class="token keyword">var</span> formData <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">FormData</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> formData <span class="token punctuation">.</span> <span class="token function">append</span> <span class="token punctuation">(</span> <span class="token string">'username'</span> <span class="token punctuation">,</span> <span class="token string">'Chris'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> formData <span class="token punctuation">.</span> <span class="token function">append</span> <span class="token punctuation">(</span> <span class="token string">'username'</span> <span class="token punctuation">,</span> <span class="token string">'Bob'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> formData <span class="token punctuation">.</span> <span class="token function">get</span> <span class="token punctuation">(</span> <span class="token string">'username'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// Returns "Chris"</span> |
2.5 .getAll ()
Returns all values of formdata corresponding to the key
1 2 3 4 5 | <span class="token keyword">var</span> formData <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">FormData</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> formData <span class="token punctuation">.</span> <span class="token function">append</span> <span class="token punctuation">(</span> <span class="token string">'username'</span> <span class="token punctuation">,</span> <span class="token string">'Chris'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> formData <span class="token punctuation">.</span> <span class="token function">append</span> <span class="token punctuation">(</span> <span class="token string">'username'</span> <span class="token punctuation">,</span> <span class="token string">'Bob'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> formData <span class="token punctuation">.</span> <span class="token function">getAll</span> <span class="token punctuation">(</span> <span class="token string">'username'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// Returns ["Chris", "Bob"]</span> |
2.6 .set ()
Assign a value to a corresponding key
1 2 3 4 5 6 | <span class="token keyword">var</span> formData <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">FormData</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// Currently empty</span> formData <span class="token punctuation">.</span> <span class="token function">set</span> <span class="token punctuation">(</span> <span class="token string">'username'</span> <span class="token punctuation">,</span> <span class="token string">'Chris'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> formData <span class="token punctuation">.</span> <span class="token function">set</span> <span class="token punctuation">(</span> <span class="token string">'userpic'</span> <span class="token punctuation">,</span> myFileInput <span class="token punctuation">.</span> files <span class="token punctuation">[</span> <span class="token number">0</span> <span class="token punctuation">]</span> <span class="token punctuation">,</span> <span class="token string">'chris.jpg'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> formData <span class="token punctuation">.</span> <span class="token function">set</span> <span class="token punctuation">(</span> <span class="token string">'name'</span> <span class="token punctuation">,</span> <span class="token number">72</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> formData <span class="token punctuation">.</span> <span class="token function">get</span> <span class="token punctuation">(</span> <span class="token string">'name'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// "72"</span> |
3. Upload file with ajax formData
By default, the field file when submitting the form will not be added to ajax if we submit it normally. When submitting, fields [type = “file”] will be missing
1 2 3 4 5 6 7 8 | <span class="token keyword">var</span> form <span class="token operator">=</span> <span class="token function">$</span> <span class="token punctuation">(</span> <span class="token string">'form'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> $ <span class="token punctuation">.</span> <span class="token function">ajax</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span> url <span class="token operator">:</span> path <span class="token punctuation">,</span> method <span class="token operator">:</span> <span class="token string">'POST'</span> <span class="token punctuation">,</span> data <span class="token operator">:</span> form <span class="token punctuation">.</span> <span class="token function">serialize</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> |
With formData
1 2 3 4 5 6 7 8 9 10 11 | <span class="token keyword">var</span> formData <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">FormData</span> <span class="token punctuation">(</span> <span class="token function">$</span> <span class="token punctuation">(</span> <span class="token string">'form'</span> <span class="token punctuation">)</span> <span class="token punctuation">[</span> <span class="token number">0</span> <span class="token punctuation">]</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> $ <span class="token punctuation">.</span> <span class="token function">ajax</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span> <span class="token operator">...</span> processData <span class="token operator">:</span> <span class="token boolean">false</span> <span class="token punctuation">,</span> contentType <span class="token operator">:</span> <span class="token boolean">false</span> <span class="token punctuation">,</span> data <span class="token operator">:</span> formData <span class="token operator">...</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
By default, Ajax will set the processData option to true, automatically convert the data to a string, and set the content-type to “application / x-www-form-urlencoded”. False will skip this process and set the form’s default setting
ContentType: false also skip setting ajax’s default contentType to “application / x-www-form-urlencoded”.
4. Upload file with iframe
Another way to upload files is to use an iframe
1 2 3 4 5 6 7 8 9 10 11 12 | <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> iframe</span> <span class="token attr-name">id</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> uploadTrg <span class="token punctuation">"</span></span> <span class="token attr-name">name</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> uploadTrg <span class="token punctuation">"</span></span> <span class="token attr-name">height</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> 0 <span class="token punctuation">"</span></span> <span class="token attr-name">width</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> 0 <span class="token punctuation">"</span></span> <span class="token attr-name">frameborder</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> 0 <span class="token punctuation">"</span></span> <span class="token attr-name">scrolling</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> yes <span class="token punctuation">"</span></span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> iframe</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> form</span> <span class="token attr-name">id</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> myForm <span class="token punctuation">"</span></span> <span class="token attr-name">action</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> http://example.com/file-upload-service <span class="token punctuation">"</span></span> <span class="token attr-name">method</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> post <span class="token punctuation">"</span></span> <span class="token attr-name">enctype</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> multipart/form-data <span class="token punctuation">"</span></span> <span class="token attr-name">target</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> uploadTrg <span class="token punctuation">"</span></span> <span class="token punctuation">></span></span> File: <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> input</span> <span class="token attr-name">type</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> file <span class="token punctuation">"</span></span> <span class="token attr-name">name</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> file <span class="token punctuation">"</span></span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> input</span> <span class="token attr-name">type</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> submit <span class="token punctuation">"</span></span> <span class="token attr-name">value</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> Submit <span class="token punctuation">"</span></span> <span class="token attr-name">id</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> submitBtn <span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> form</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> div</span> <span class="token attr-name">id</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> ajaxResultTest <span class="token punctuation">"</span></span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> div</span> <span class="token punctuation">></span></span> |
1 2 3 4 | <span class="token function">$</span> <span class="token punctuation">(</span> <span class="token string">"iframe"</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">load</span> <span class="token punctuation">(</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token function">alert</span> <span class="token punctuation">(</span> <span class="token string">"The file is uploaded"</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |