获取请求无法在移动设备上运行

时间:2018-02-01 00:53:28

标签: javascript fetch gatsby

我有一个联系表单,其中包含要发布的获取请求(formspree联系表单)。虽然在桌面和任何浏览器中它都可以正常工作,但一旦我移动它就不会......

表单按钮显示“发送”,同时提交该值会更改为“发送...”,成功提交后会显示“已发送消息”。在移动设备上,按下按钮后它会切换到“正在发送...”但是没有其他事情发生,我也没有收到提交。

我尝试使用ghostlab进行调试,我得到的是:

formData.entries is not a function

我没有找到任何解决方案,所以希望有人在这里可能有一个想法..

这是我的代码,请注意if(typeof window!== undefined)和window.onload = function必须添加到任何工作,因为我使用gatsby js来构建我的网站。

if (typeof window !== `undefined`) {

window.onload=function(){

  const sendButton = document.getElementById('send-button')

  const formDataToJson = formData => {
    const entries = formData.entries();
    const dataObj = Array.from(entries).reduce( (data, [key, value]) => {
      data[key] = value;
      if (key === 'email') {
        data._replyTo = value;
      }
      return data;
    }, {});
    return JSON.stringify(dataObj);
  };


  const postToFormspree = formData => fetch(`https://formspree.io/myemail@gmail.com`, {
    method: 'POST',
    body: formDataToJson(formData),
    headers: {
      'Content-Type': 'application/json'
    }
  }).then(r => r.json());

  document.getElementById('myform').addEventListener('submit', function (e) {

    e.preventDefault();

    sendButton.value = 'Sending..';

    const formData = new FormData(this);

    postToFormspree(formData).then(response => {
        sendButton.value = 'Message sent!';
        myform.reset();

    });
  });

}
}

2 个答案:

答案 0 :(得分:1)

After being pointed into the right direction by Barmar, I got it working by simply adding the formdata-polyfill npm package: https://www.npmjs.com/package/formdata-polyfill

and then inside my main.js I added

var WebFont = require('webfontloader');

like so:

if (typeof window !== `undefined`) {

window.onload=function(){

  require('formdata-polyfill')

.....

Deployed it and tested in chrome and FF on mobile and working fine so far

答案 1 :(得分:0)

根据MDN FormData.entries提供Chrome 50 +,Firefox 44+和Opera。 Edge或Safari不支持它,并且不知道哪个版本的Internet Explorer支持它。