Javascript 无法构造';FormData';出现错误

Javascript 无法构造';FormData';出现错误,javascript,ajax,phpmailer,Javascript,Ajax,Phpmailer,我的联系方式有问题。就在最近,一切都很好,但现在我无法发送消息。 当我尝试提交表单时,我现在看到以下错误: 未捕获的TypeError:构造“FormData”失败:参数1不是 类型为“HTMLFormElement”。 在submitForm上(ajax.js:77) 在HTMLFormElement。(ajax.js:72) 在HTMLFormElement.dispatch(jquery-3.3.1.js:5183) 位于HTMLFormElement.elemData.handle(jq

我的联系方式有问题。就在最近,一切都很好,但现在我无法发送消息。 当我尝试提交表单时,我现在看到以下错误:

未捕获的TypeError:构造“FormData”失败:参数1不是 类型为“HTMLFormElement”。 在submitForm上(ajax.js:77) 在HTMLFormElement。(ajax.js:72) 在HTMLFormElement.dispatch(jquery-3.3.1.js:5183) 位于HTMLFormElement.elemData.handle(jquery-3.3.1.js:4991)

$(文档).ready(函数(){
$(“#subscribeForm”).validator()。在(“提交”,函数(事件){
if(event.isDefaultPrevented()){
formError();
submitsg(false,“您确定填写的表单输入正确吗?”);
}否则{
event.preventDefault();
submitForm();
}
});
函数submitForm(){
var subscribe_email=$(“输入[name=subscribe_email]”)。val();
var formData=新formData($(此)[0]);
formData.append('subscribe\u email',subscribe\u email');
$.ajax({
url:“include/ajax/subscribe.php”,
类型:“POST”,
contentType:false,
processData:false,
数据:formData,
cache:false,
成功:函数(文本){
如果(文本=“成功”){
formSuccess();
}否则{
formError();
提交TMSG(错误,文本);
}
}
});
}
函数formSuccess(){
$(“#subscribeForm”)[0].reset();
submitsg(“有效”,“您的邮件已成功发送”);
}
函数formError(){
submitMSG(“无效”,“出现问题。请重试或与我们的支持团队联系”);
}
函数submitsg(有效,消息){
如果(有效){
var msgClasses=“cf警报成功”;
}否则{
var msgClasses=“cf alert warning”;
}
$(“#success_submit”).removeClass().addClass(msgClasses).text(msg);
}
});

错误非常清楚地说明了这一点

未捕获的TypeError:构造“FormData”失败:参数1不是“HTMLFormElement”类型。在HTMLFormElement的submitForm(ajax.js:77)上。(ajax.js:72)位于HTMLFormElement.dispatch(jquery-3.3.1.js:5183)位于HTMLFormElement.elemData.handle(jquery-3.3.1.js:4991)

var formData=new formData($(this)[0]);//$(此)[0]不是表单元素
在代码中,
$(此)[0]
绑定到全局对象(浏览器中的窗口)

您可以像这样传递对表单的引用:

$("#subscribeForm").on("submit", function (event) {
    event.preventDefault();
    submitForm(this);
});

function submitForm(myForm){
    const formData = new FormData(myForm);
    // or like this
    // const myForm = document.getElementById("subscribeForm");
    // const formData = new FormData(myForm);

}
在您的例子中,您可以在执行FormData.append()之后不带任何参数地调用FormData构造函数


您可以阅读有关formData的更多信息。错误在您的行中:

//var formData = new FormData($(this)[0]);
解决方案很简单:

var formData = new FormData();

在此之后,可以添加任何您想要的内容。

还有另一个与表单id相同的元素#subscribebeform

尝试将此
记录在
submitForm
中。在严格模式下应该是
窗口
未定义
,因为调用此函数时没有将其绑定到任何位置,也没有将其作为任何方法(
submitForm()
)。现在,试着猜一下这里的
$(this)[0]
是什么。谢谢,不幸的是,这没有帮助。错误现在显示为:Uncaught SyntaxError:Unexpected token(@Jamdev)您没有获得解决方案,因此它不起作用也就不足为奇了。您被要求进行一些调试,以便您可以自己找出('submit',…)上的
中存在的问题
handler,
this
将引用
因此,如何将其传递给您的
submitForm
函数,例如
submitForm(this)
function submitForm(form){…}
在这里您可以使用
form
而不是
$(this)[0]/code>@Phil非常感谢您,朋友。您是个天才!“在您的情况下,您可以在执行FormData.append()之后无需任何参数调用FormData构造函数。”否,
append
不要删除初始化时设置的内容。如果需要表单数据,他们应该保留它(这很可能)。
var formData = new FormData();