如何发送js FormData

时间:2019-04-04 10:30:49

标签: javascript ajax go multipartform-data

我正在尝试从FormData检索数据

js端ajax请求

function sendForm()
{
  let form=document.getElementById("myForm");

    var formData = new FormData(); 

    for(var i=0; i<form.length; i++)
    {
       formData.append(form[i].name, form[i].value);
    }
    var xmlHttp = new XMLHttpRequest();
        xmlHttp.onreadystatechange = function()
        {
            if(xmlHttp.readyState == 4 && xmlHttp.status == 200)
            {
                   console.log(xmlHttp.responseText)
            }
        }
        xmlHttp.open("post", url); 
       xmlHttp.setRequestHeader("Content-Type", "multipart/form-data");
       xmlHttp.send(formData); 
 }

从Go边

func login(w http.ResponseWriter, r *http.Request) {
        r.ParseForm()

        username:= r.FormValue("username")     // Data from the form
        password:= r.FormValue("password") 
        fmt.Println(username,password) //getting empty
    }

我也尝试过邮递员使用form-data选项,但结果却相同 在php中工作正常...在Go lang中,我不知道如何处理multipart / form-data。

2 个答案:

答案 0 :(得分:0)

import { IonicPage, NavController, NavParams, ViewController, LoadingController } from '@ionic/angular';

通常,XMLHttpRequest将读取FormData对象并从中生成Content-Type标头。

在这里,您通过显式设置Content-Type来覆盖它,但是缺少必需的xmlHttp.setRequestHeader("Content-Type", "multipart/form-data"); 参数,因此无法对多部分内容进行解码。

删除引号行。

答案 1 :(得分:0)

对我来说很好,请检查网络/响应。我建议您使用fetch,因为它更简单。

function onSubmit(e) {
  e.preventDefault();

  const data = new FormData(e.target);

  fetch('https://httpbin.org/post', {
      method: 'post',
      body: data,
  })
  .then(r => r.json())
  .then(r => console.log(r))
}

document.querySelector('form').addEventListener('submit', onSubmit);
<form class="form">
  <input type="text" name="name" placeholder="Name" />
  <input type="email" name="email" placeholder="Email" />
  <button type="submit">Submit</button>
</form>