AJAX与PHP自提交表单和验证
我一直在通过David Powers的《PHP解决方案》一书学习PHP,这本书有一个带有基本验证/错误处理和输入清理的联系表单,我希望在不刷新页面的情况下使用它 我正在用XAMPP在本地进行测试,并且使用php表单本身工作得非常完美:错误消息显示正确,如果表单成功提交,将显示一个感谢页面,表单将作为电子邮件发送到我的测试电子邮件地址 现在我需要表单来提交和显示带有AJAX的错误消息。我读过很多关于实现这一点的帖子,但我没有成功地实现这一点。我已经尝试了jQuery$.ajax和$.post方法-如果字段都已填充,则会显示成功消息,但消息不会发送 我的猜测是javascript和php数组的结构不同,但不知道如何协调这一点。我甚至不确定php处理脚本得到/发送了什么。如何在不刷新页面的情况下提交此表单,但仍然使用php脚本进行服务器端验证 为了简化,我已经从页面中删除了所有内容(并将所有文件放在同一个文件夹中),除了表单:php、html和我无法理解的jQuery/AJAX 希望这是有意义的。我的4个文件: mySite.js(我遇到麻烦的jQuery/AJAX…):AJAX与PHP自提交表单和验证,php,jquery,ajax,forms,Php,Jquery,Ajax,Forms,我一直在通过David Powers的《PHP解决方案》一书学习PHP,这本书有一个带有基本验证/错误处理和输入清理的联系表单,我希望在不刷新页面的情况下使用它 我正在用XAMPP在本地进行测试,并且使用php表单本身工作得非常完美:错误消息显示正确,如果表单成功提交,将显示一个感谢页面,表单将作为电子邮件发送到我的测试电子邮件地址 现在我需要表单来提交和显示带有AJAX的错误消息。我读过很多关于实现这一点的帖子,但我没有成功地实现这一点。我已经尝试了jQuery$.ajax和$.post方法-
mySite={
jsFormSubmission:function(){
$(“#反馈”)。提交(功能(事件){
event.preventDefault();
var errorMsg=“请修复指示的项目。
”;
var successsg=“ ”;
变量myObject={
名称:$(“#名称”).val(),
电子邮件:$(“#电子邮件”).val(),
备注:$(“#备注”).val()
};
var ajaxData=JSON.stringify(myObject);
$.ajax({
键入:“POST”,
url:'form.php',
数据:ajaxData,
成功:功能(数据){
$(“.formResult”).html(successsg);
},
错误:函数(http){
$(“.formResult”).html(errorMsg);
警报(http.responseText);
}
});
});
}
};
表单(contact.php):
$(文档).ready(函数(){
jsFormSubmission();
});
很抱歉,无法发送您的邮件。请稍后再试。
请修复所示的项目。
姓名:
请输入您的姓名
请输入您的电子邮件地址
无效的电子邮件地址
请输入您的信息
php(包含在contact.php顶部):
processmail.php(验证脚本-包含在form.php中):
有几种方法可以从PHP端显示错误。您可以抛出一个我不推荐的异常,或者使用一个标题:
header($_SERVER['SERVER_PROTOCOL'] . ' 500 Internal Server Error', true, 500);
在AJAX调用中,使用jQuery错误回调:
$.ajax({
url: //url,
data: //data,
success: function (data) { //show success },
error: function () { //display code here }
});
您还可以从PHP端返回错误消息正文中的错误,并在错误回调中从正文中删除该错误
PHP:
JavaScript:
error: function(http) {
// show http.responseText;
}
此外,对于表单提交,请将数据打包到对象中,然后对其进行序列化。因此:
var myObject = {
property1 : 'string',
property2 : [ 'array' ]
};
var ajaxData = JSON.stringify(myObject);
有几种方法可以从PHP端显示错误。您可以抛出一个我不推荐的异常,或者使用一个标题:
header($_SERVER['SERVER_PROTOCOL'] . ' 500 Internal Server Error', true, 500);
在AJAX调用中,使用jQuery错误回调:
$.ajax({
url: //url,
data: //data,
success: function (data) { //show success },
error: function () { //display code here }
});
您还可以从PHP端返回错误消息正文中的错误,并在错误回调中从正文中删除该错误
PHP:
JavaScript:
error: function(http) {
// show http.responseText;
}
此外,对于表单提交,请将数据打包到对象中,然后对其进行序列化。因此:
var myObject = {
property1 : 'string',
property2 : [ 'array' ]
};
var ajaxData = JSON.stringify(myObject);
数据:'$(“#反馈”).serializeArray();'代码>不正确。这将以字符串的形式提交JS代码,而不是序列化调用的输出-除了字符串之外,代码永远不会被视为任何东西。你在那一行的上方还有一个流浪的,
,把其他的都抛在脑后了。啊,是的,当我发布这篇文章时,我不小心删除了这个。谢谢你指出这一点。我明白你关于数据的观点:''是字符串。我替换了我用来缩短代码以便发布的变量。如果我删除撇号和分号,那么它将读取数据:$(“#反馈”).serializeArray(),我仍然无法使用ajax提交。data:'$(“#反馈”).serializeArray()代码>不正确。这将以字符串的形式提交JS代码,而不是序列化调用的输出-除了字符串之外,代码永远不会被视为任何东西。你在那一行的上方还有一个流浪的,
,把其他的都抛在脑后了。啊,是的,当我发布这篇文章时,我不小心删除了这个。谢谢你指出这一点。我明白你关于数据的观点:''是字符串。我替换了我用来缩短代码以便发布的变量。如果我删除撇号和分号,那么它将读取数据:$(“#feedback”).serializeArray(),我仍然无法使用ajax提交。好的,在myObject中,我希望对每个字段使用此格式,然后将ajaxData变量传递给数据设置,如:$.ajax({data:ajaxData});?或者我还需要序列化ajaxData变量吗?我以前从未使用过json,
var myObject = {
property1 : 'string',
property2 : [ 'array' ]
};
var ajaxData = JSON.stringify(myObject);