我搜索了类似主题提供的惊人答案,但我似乎找不到能回答我问题的答案。
我正在尝试通过AJAX将数据发布到单独的PHP页面,以便在不重新加载页面的情况下发送电子邮件。但是,我可以将数据发送到POST并重新加载页面,或者表单没有POST,页面保持原样。以下示例属于后一种情况。
我不确定这是否相关,但表格包含在模态中。如有必要,我可以发布。
jQuery的:
$("#submit").click(function(e) {
e.preventDefault();
$.ajax({
method: "POST",
url: "email.php",
data: {
name: $("#name").val(),
email: $("#returnEmail").val(),
subject: $("#subject").val(),
body: $("#body").val(),
},
dataType: "html",
success: function() {
$("#errorSuccess").html('<div class="alert alert-success" role="alert">Email Sent!</div>');
}
});
});
提前致谢!
答案 0 :(得分:1)
你以错误的方式追加数据。
当您将ajax中的内容发布到php(然后使用?name=value&name=value
在那里阅读)时,PHP会将其作为url编码数据(id="myform"
)接收。
所以,这里有一些解决方案:
使用某个ID(serialize()
)标识您的表单元素,然后使用 method: "POST",
url: "email.php",
data: $("#myform").serialize(),
方法检索您需要的值。像这样:
var form_data = {};
form_data["name"] = $("#name").val();
form_data["email"] = $("#email").val();
您可以将其附加到Javascript数组中,如下所示:
data:form_data,
然后您可以将其作为常规数据发送到Ajax参数中,
FormData
使用var form_data = new FormData();
form_data.append("name", $("#name").val());
form_data.append("email", $("#email").val());
对象。并附加表单中的数据 - 当您以相同的形式附加数据和文件时,建议使用FormData。
var form = document.getElementById('myform');
var form_data = new FormData(form);
或者更简单,再次使用表单中的ID:
data: form_data,
processData: false,
contentType: false
对于发送,您可以在ajax参数中使用它:
processData
* contentType
和 data: '?name='+$("#name").val()+'&email='+$("#email").val()
非常重要,如果它们不存在,则会抛出错误(如果我没记错的话,非法调用)
手动将其添加到字符串中(丑陋且不推荐)。但它告诉你它是如何工作的(你知道,仅仅是为了好奇)......
{{1}}
你的ajax的成功和错误会很棒。不要忘记在PHP中设置响应,看到PHP非常适合帮助您。
希望有所帮助:)