我有一个联系表单,其中包含要发布的获取请求(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();
});
});
}
}
答案 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支持它。