{"componentChunkName":"component---src-templates-post-template-js","path":"/posts/8","result":{"data":{"markdownRemark":{"id":"52739396-7781-52fb-b06d-19de91826ce0","html":"<p><strong>Form 형식으로 submit 하던 코드를 비동기 방식으로 송신하고 response의 결과값에 따라 처리해야 할 일이 생겼다.</strong>\n<strong>더 이상 jquery를 사용하여 legacy 코드를 수정하고 싶지 않지만.. 일이 생기면 할 수 밖에 없다. 덕분에 FormData를 사용해볼 수 있었다.</strong></p>\n<p>여러가지 우여곡절이 있었다.\n처음에는 <code class=\"language-text\">ajaxForm</code> 플러그인을 사용하여 간단하게 끝내고 싶었으나, 레거시 코드의 Jquery가 어떻게 꼬였는지 작동하지 않아,\n방법을 바꿔 <code class=\"language-text\">FormData</code>를 사용했다.</p>\n<h4 id=\"참고\"><a href=\"#%EC%B0%B8%EA%B3%A0\" aria-label=\"참고 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>&#x3C;참고></h4>\n<ul>\n<li><a href=\"https://hellogk.tistory.com/28\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https://hellogk.tistory.com/28</a></li>\n<li><a href=\"https://stackoverflow.com/questions/26922500/formdata-empty-when-constructing-with-element\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https://stackoverflow.com/questions/26922500/formdata-empty-when-constructing-with-element</a></li>\n<li><a href=\"https://stackoverflow.com/questions/12755945/jquery-and-html-formdata-returns-uncaught-typeerror-illegal-invocation\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https://stackoverflow.com/questions/12755945/jquery-and-html-formdata-returns-uncaught-typeerror-illegal-invocation</a></li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">function</span> <span class=\"token function\">ajaxFormData</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">dataSet<span class=\"token punctuation\">,</span> successFn</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  $<span class=\"token punctuation\">.</span><span class=\"token function\">ajax</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n    type<span class=\"token punctuation\">:</span> <span class=\"token string\">\"POST\"</span><span class=\"token punctuation\">,</span>\n    url<span class=\"token punctuation\">:</span> window<span class=\"token punctuation\">.</span>location<span class=\"token punctuation\">.</span>href<span class=\"token punctuation\">,</span>\n    data<span class=\"token punctuation\">:</span> dataSet<span class=\"token punctuation\">,</span>\n    contentType<span class=\"token punctuation\">:</span> <span class=\"token boolean\">false</span><span class=\"token punctuation\">,</span>\n    processData<span class=\"token punctuation\">:</span> <span class=\"token boolean\">false</span><span class=\"token punctuation\">,</span>\n    <span class=\"token function-variable function\">success</span><span class=\"token punctuation\">:</span> <span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">reponse</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">if</span><span class=\"token punctuation\">(</span>reponse<span class=\"token punctuation\">.</span>result<span class=\"token operator\">===</span><span class=\"token string\">'success'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n        <span class=\"token function\">successFn</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n      <span class=\"token punctuation\">}</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span><span class=\"token function-variable function\">error</span><span class=\"token punctuation\">:</span> <span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">xhr<span class=\"token punctuation\">,</span> status</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n      <span class=\"token function\">alert</span><span class=\"token punctuation\">(</span>xhr <span class=\"token operator\">+</span> <span class=\"token string\">\":\"</span> <span class=\"token operator\">+</span> status<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">function</span> <span class=\"token function\">temp_save</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <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[name=frm_content]'</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>\n  <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>form<span class=\"token punctuation\">)</span>\n  console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>formData<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <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>\n        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>\n  <span class=\"token punctuation\">}</span>\n  <span class=\"token function\">ajaxFormData</span><span class=\"token punctuation\">(</span>formData<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>\n      <span class=\"token function\">alert</span><span class=\"token punctuation\">(</span><span class=\"token string\">'임시 저장이 완료되었습니다.'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      window<span class=\"token punctuation\">.</span>location<span class=\"token punctuation\">.</span><span class=\"token function\">reload</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<div class=\"gatsby-highlight\" data-language=\"console\"><pre class=\"language-console\"><code class=\"language-console\">FormData {}\n// 이 부분 때문에 고생을 했다.\n// `var formData = new FormData(form)` 의 결과를 콘솔에 찍어보고, 계속 빈 값이라고 생각했다.\n// 찾아보니, FormData is created only for sending keyed data, not fot retrieving it\n// FormData는 콘솔에 찍으면 본래 저렇게 빈 값처럼 보인다.\n\n// FormData에 담긴 값을 확인해보고 싶으면 `entries()`를 활용하여 뽑을 수 있다.\ncsrfmiddlewaretoken, 6hbeoz1ebVM869TPrcoV7HzzwPjR72gBJLlbLGveWmBhEVru1vfkwZrsb1LQSUyL\nstate, temp\nwish_company, 기타\nteacher_question_46, please god help me\nresume_file, [object File]</code></pre></div>","fields":{"slug":"/posts/8","tagSlugs":null},"frontmatter":{"date":"2019-12-06","description":"","tags":null,"title":"FormData + ajax 데이터 송신"}}},"pageContext":{"isCreatedByStatefulCreatePages":false,"slug":"/posts/8"}}}