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

时间:2015-09-05 12:49:58

标签: javascript php html ajax forms

在我继续之前,我知道这个问题已被问过几次,但它没有涉及特异性。

我有一个functions.php脚本,其中包含一些函数,我希望在用户点击锚标记时调用特定的函数。

我已经以这种方式完成了大部分问题,我明白这将通过javascript和ajax加载使用点击属性指定的页面来完成。

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

更确切地说,我有一个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>

registration_complete.php

<?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>

请注意,我已从其中一个与我的问题相关的答案中复制了js代码

的functions.php

<?php 
  //connect to db code

  // insert into db code

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

?>

所以当ajax加载functions.php页面时,javascript如何调用确切的函数(PHP Mailer)。

我只是想声明我是编程的新手,我只是有点熟悉php。我对Javascript和Ajax的了解可以说是微不足道的。也想对所有贡献者表示非常感谢。

2 个答案:

答案 0 :(得分:0)

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

正如您在问题中已经提到的那样,这可能涉及AJAX,这肯定是正确的,但让我们更准确一点:当您的Javascript代码打算执行&#34;执行&#34;一个PHP函数,它需要触发对服务器的请求。不一定使用AJAX,因为您可以触发表单提交或锚点击。请求将到达服务器,服务器将处理它。

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

  • Javascript检测到必须执行foo
  • Javascript触发对服务器的请求
  • 请求服务器
  • 服务器处理请求
  • 服务器响应

谜题中缺少的部分是让服务器知道它必须执行foo。为此,服务器必须以某种方式确定是否需要执行foo。这可以通过各种方式完成,包括获取params或post params。接下来,您需要修改您的Javascript代码或html结构,让服务器知道该函数需要执行。

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

此外,您正在服务器上进行验证。这没关系,但是我可以建议你验证客户端的输入并防止输入无效,以减少服务器负载......在服务器端,如果帖子有效,则需要执行所需的功能

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

if (isset ($_POST)){

这不是检查这是否是邮寄请求的正确方法。你需要

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

代替。

答案 1 :(得分:0)

如果请求来自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>

现在有了链接

http://yourSite.com?method=foo

并且函数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 );