Javascript 单击锚定标记时,如何从函数页面调用特定函数

Javascript 单击锚定标记时,如何从函数页面调用特定函数,javascript,php,html,ajax,forms,Javascript,Php,Html,Ajax,Forms,在我继续之前,我知道这个问题已经被问了好几次了,但它没有涉及到具体性 我有一个functions.php脚本,其中包含两个函数,我想在用户单击锚标记时调用一个特定的函数 我已经以这种方式讨论了大多数问题,我知道这将通过javascript和ajax来完成,并加载使用on-click属性指定的页面 我的问题是,当这种情况发生时(页面正在加载),我如何从functions.php脚本中调用特定函数,如果我在锚定标记所在的当前页面上需要它,它会导致复杂情况吗 更确切地说,我有一个register.ph

在我继续之前,我知道这个问题已经被问了好几次了,但它没有涉及到具体性

我有一个functions.php脚本,其中包含两个函数,我想在用户单击锚标记时调用一个特定的函数

我已经以这种方式讨论了大多数问题,我知道这将通过javascript和ajax来完成,并加载使用on-click属性指定的页面

我的问题是,当这种情况发生时(页面正在加载),我如何从functions.php脚本中调用特定函数,如果我在锚定标记所在的当前页面上需要它,它会导致复杂情况吗

更确切地说,我有一个register.php页面,它执行以下操作:;获取用户数据,然后进行验证,如果已验证,则将其插入数据库并向用户发送邮件以验证其帐户,然后重定向到registration_complete.php页面,该页面可以在用户未收到链接时重新发送链接。因此,单击该链接将在functions.php文件中运行特定的邮件函数

代码写在下面

register.php

<?php 
 session_start();
 $_SESSION['name'] = hmtspecialchars($_POST['name']);

 //validation code goes here
  if (isset ($_POST)){ //check that fields are not empty etc...
                       // insert into db code...
                       // email the user code...
                       // redirect to registration_complete.php code..
  } 

?>
<form method='post' action="">
  <input type="text" name="name" id="name">
  <input type="text" name="email" id="email">
  <input type= "submit" value="submit">
</form>
<?php
 require'functions.php'
 session_start();
 $Name = $_SESSION['name']
 $RegisterationComplete = "Thank you . ' ' . ' $Name' . ' ' . for registering pls click on the link in the email sent to the email address you provided to verify you account. If you didn't recieve the email click on the resend email link below to get on resent to you. Please make sure to check your spam folder if you did not see it in your inbox folder."
?>
<script type="text/javascript" src="jquery.min.js"></script>
<script type="text/javascript">
  function doSomething() {
    $.get("somepage.php");
    return false;
  }
</script>
<a href="#" onclick="do something">Resend Verification Link</a>
<?php 
  //connect to db code

  // insert into db code

  // send verification link code using PHP Mailer function..

?>

注册\u complete.php

<?php 
 session_start();
 $_SESSION['name'] = hmtspecialchars($_POST['name']);

 //validation code goes here
  if (isset ($_POST)){ //check that fields are not empty etc...
                       // insert into db code...
                       // email the user code...
                       // redirect to registration_complete.php code..
  } 

?>
<form method='post' action="">
  <input type="text" name="name" id="name">
  <input type="text" name="email" id="email">
  <input type= "submit" value="submit">
</form>
<?php
 require'functions.php'
 session_start();
 $Name = $_SESSION['name']
 $RegisterationComplete = "Thank you . ' ' . ' $Name' . ' ' . for registering pls click on the link in the email sent to the email address you provided to verify you account. If you didn't recieve the email click on the resend email link below to get on resent to you. Please make sure to check your spam folder if you did not see it in your inbox folder."
?>
<script type="text/javascript" src="jquery.min.js"></script>
<script type="text/javascript">
  function doSomething() {
    $.get("somepage.php");
    return false;
  }
</script>
<a href="#" onclick="do something">Resend Verification Link</a>
<?php 
  //connect to db code

  // insert into db code

  // send verification link code using PHP Mailer function..

?>

Javascript永远不会调用PHP函数,因为PHP在服务器上运行,Javascript在web浏览器中运行。服务器和web浏览器被假定为不同的机器,唯一的例外是由开发人员进行测试。因此,如果functions.php中有一个名为foo的函数,Javascript将无法调用它

正如您在问题中已经提到的,这可能涉及AJAX,这当然是正确的,但更确切地说:当Javascript代码打算“执行”PHP函数时,它需要触发对服务器的请求。不一定使用AJAX,因为您可以触发表单提交,也可以锚定单击。请求将到达服务器,服务器将处理该请求

现在,因为我们知道生命周期如下:

  • Javascript检测到必须执行foo
  • Javascript触发对服务器的请求
  • 请求服务器
  • 服务器处理请求
  • 服务器响应
拼图中缺少的部分是让服务器知道它必须执行foo。为了实现这一点,服务器必须以某种方式确定是否需要执行foo。这可以通过多种方式完成,包括get参数或post参数。接下来,需要修改Javascript代码或html结构,让服务器知道需要执行该函数

例如,您可以向锚定标记的href添加get参数,但通常需要让服务器知道意图是什么,并且在服务器端需要处理该意图

此外,您正在服务器上执行验证。这是可以的,但我建议您在客户端验证输入,如果输入无效,请防止发布,以减少服务器负载。。。在服务器端,如果post有效,则需要执行所需的函数

此外,这一部分也不完全正确:

if (isset ($_POST)){
这不是检查这是否是post请求的正确方法。你需要

if ($_SERVER['REQUEST_METHOD'] === 'POST') {

相反。

请求是否来自javascript或常规服务器请求(用户单击链接)并不重要。您需要检查GET或POST参数,并将请求重定向到特定函数

<?php
if( isset( $_GET['method'] ) ) {
    // NOTE: untested and REALY unsecure Code
    $method = $_GET['method'];

    if( function_exists( $method ) ) {
        call_user_func( $method );
    }
}
else {
    echo '<a id="link" href="?method=foo">klickme</a>';
}


function foo(){
    echo 'in method';
}

?>
<div id="answer"><!-- server answer here --></div>
然后执行foo函数

现在,在JS部分,您必须检查用户是否单击链接或发送表单。然后,您必须使用Ajax将请求发送到服务器,并处理来自服务器的结果

// inject the serverData in DOM
function loadSuccess( e ) {
    document.getElementById( 'answer' ).innerHTML = e.target.response;
}
// handle click, open ajax request
function doClick( e ) {
    e.preventDefault();
    var ajax = new XMLHttpRequest();
    ajax.open("GET", e.target.href ,true);
    ajax.send();
    ajax.addEventListener('load', loadSuccess);
}

var link = document.getElementById( 'link' );
link.addEventListener( 'click', doClick );

我用后者来检查它是否被贴了,我只是在问问题时试图简化它。谢谢你的解释。如果我理解正确,我必须首先将用户重定向到我的函数所在的页面,然后检查是否存在重定向,然后执行该函数?。这是最好的方法还是检查Ajax是否加载了页面,然后使用php编写代码告诉它执行特定的功能?