我可以使用jqueryajax在表单提交中同时调用同一php页面上的方法和另一php代码中的方法吗?
救救我!我是一名php新手,对php请求感到困惑 在MVC结构视图上,我创建了一个HTML表单,在表单提交上,我想调用两个不同的方法我可以使用jqueryajax在表单提交中同时调用同一php页面上的方法和另一php代码中的方法吗?,php,jquery,ajax,Php,Jquery,Ajax,救救我!我是一名php新手,对php请求感到困惑 在MVC结构视图上,我创建了一个HTML表单,在表单提交上,我想调用两个不同的方法sendMail()和validateData(),这两个方法可以在两个不同的控制器(php文件)中使用,例如process.php中的一个和register.php中的另一个 在form submit first上,我想验证数据并使用validatedata()将数据保存到数据库。然后我想使用sendMail()向用户发送验证邮件 为了处理请求(单击事件),我使用
sendMail()
和validateData()
,这两个方法可以在两个不同的控制器(php文件)中使用,例如process.php
中的一个和register.php
中的另一个
在form submit first上,我想验证数据并使用validatedata()
将数据保存到数据库。然后我想使用sendMail()
向用户发送验证邮件
为了处理请求(单击事件),我使用jQueryAjax。Ajax采用单个URL将数据发布到指定的URL。那么,如何在一个Ajax调用中发出两个不同的URL请求,或者说如何在一个Ajax调用中调用这两个方法呢?
请建议我应该做什么来解决这个问题?
提前感谢。控制器应处理整个请求 因此,如果用户发出(例如)请求创建新用户帐户,则单个控制器应:
{
$errors = validateData($_POST);
if ($errors) {
echo generateErrorPage($errors);
exit;
}
$result = createUserInDBAndSendEmail($_POST);
showSuccessPage($result);
}
(为了举例说明,这是非常粗糙的)
不要在不同的控制器之间划分完成任务所需的步骤。那么你只需要担心一个URL 您可以在不同的文件之间划分函数,然后
包含它们
创建用户的完整过程可能需要来自客户端的额外反馈,例如
客户端向CreateUser控制器发出请求
服务器创建一个处于“未确认”状态的用户,向该用户发送电子邮件,并返回一个HTML页面,告诉他们检查电子邮件
用户单击电子邮件中的链接向确认邮件管理员发出请求
服务器将用户更改为“已确认”,并返回一个带有欢迎消息的登录主页
…在这种情况下,它将有多个控制器,因为您需要用户发出两个不同的请求。PHP中的validatedata()函数在完成并满意数据有效并已保存后,只调用sendMail()函数将更有意义。(您完全可以从页面中一个接一个地进行两个单独的AJAX调用,但与让PHP执行此任务相比,这不是非常有效)。此外,您提到“sendMail”在控制器文件中……但这在逻辑上没有多大意义。发送邮件是一项后端功能,它与控制器和操作或用户界面没有直接关系。它可能应该在一个单独的类中,包含与电子邮件相关的实用程序,然后您可以从代码中的任何其他位置调用这些实用程序。是的,执行同步ajax调用或者说ajax调用链不适合于性能目的。假设我必须验证大数据,那么最终显示邮件发送消息将花费更多时间。所以,如果我有更少的数据要验证,我想这会很好。而且,sendMail()是my process.php控制器中的函数,它只获取post数据并将错误或成功响应返回给视图,向用户发送邮件的逻辑写在单独的php文件中,该文件在sendMail()函数中调用。这不是我的问题吗?“向用户发送邮件的逻辑写在一个单独的php文件中”……太好了,因此验证代码应该在验证数据后调用该函数。”假设我必须验证大数据,那么最终显示邮件发送消息将花费更多时间“…好的,但如果数据无效,您肯定不想发送邮件?如果是这样,那么您需要等待验证完成,而不管验证需要多长时间。但老实说,除非你有一些非常复杂的验证要求,否则不太可能花费用户会注意到的时间。好的,我理解逻辑。谢谢ADyson。非常感谢!你的回答对我很有帮助。我得到了我想要的