Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以使用jqueryajax在表单提交中同时调用同一php页面上的方法和另一php代码中的方法吗?_Php_Jquery_Ajax - Fatal编程技术网

我可以使用jqueryajax在表单提交中同时调用同一php页面上的方法和另一php代码中的方法吗?

我可以使用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()向用户发送验证邮件 为了处理请求(单击事件),我使用

救救我!我是一名php新手,对php请求感到困惑

在MVC结构视图上,我创建了一个HTML表单,在表单提交上,我想调用两个不同的方法
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。非常感谢!你的回答对我很有帮助。我得到了我想要的