当用户点击链接时,我该如何运行PHP代码?

40

当用户点击链接时,我希望一个页面运行一些 PHP 代码,而不将用户重定向。这是否可能?

<a href=""></a>

或者使用 JavaScript 的 onclick 事件?

10个回答

96

要实现这个功能,你需要编写一个JavaScript函数,并在onclick事件触发时加载一个页面并返回false以防止重定向。如果你的项目允许使用jQuery,可以使用以下代码:

<script type="text/javascript" src="jquery.min.js"></script>
<script type="text/javascript">
function doSomething() {
    $.get("somepage.php");
    return false;
}
</script>

<a href="#" onclick="doSomething();">Click Me!</a>

如果需要使用表单值,您也可以进行回发(post-back),使用 $.post() 方法即可。


6
函数应该返回 false,这样 HREF 就不会被跟踪。 - Roy Rico
5
两年后,现在我意识到这个答案之所以如此出色! - chustar
2
@Parrots:如果我想将一个ID传递给somepage.php,我该如何实现?比如我将“a”链接更改为onclick="doSomething(<?php echo $id ?>);",那么我该如何将其传递到php页面?谢谢。 - nasty
1
@nasty 将其存储在会话变量中,或将其作为URL的一部分传递。 - Will Brickner

10

正如其他人建议的那样,使用JavaScript进行AJAX调用。

<a href="#" onclick="myJsFunction()">whatever</a>

<script>
function myJsFunction() {
     // use ajax to make a call to your PHP script
     // for more examples, using Jquery. see the link below
     return false; // this is so the browser doesn't follow the link
}

http://docs.jquery.com/Ajax/jQuery.ajax


1
没必要因为他没有使用jQuery就给那个人点踩。不过应该有人编辑一下帖子修复链接。 - Justin Poliey
谢谢Justin,已修复链接。我只是添加了Jquery的链接,但没有添加实际代码,以防万一。不是每个人都能使用Jquery,无论他们多么想要(愚蠢的法律合同!) - Roy Rico
你应该在函数中至少添加非jQuery AJAX代码示例,因为现在你只是记录了JavaScript的onclick功能,而他已经知道了:P - Parrots

8
如果你还没有安装jQuery(因为你是初学者或其他原因),请使用以下代码:

如果您还没有安装jQuery,请使用以下代码:

<a href="#" onclick="thisfunction()">link</a>

<script type="text/javascript">
function thisfunction(){
    var x = new XMLHttpRequest();
    x.open("GET","function.php",true);
    x.send();
    return false;
}
</script>

6
如果您不使用jQuery,为什么会被认为是初学者?我喜欢使用JavaScript,并不是因为我很蠢。 - mathmaniac88
1
我猜你肯定是个厉害的人 :) 哈哈哈 - acenturyandabit
2
回过头来看,我意识到 jQ 是多么冗余的依赖,特别是考虑到 Web 标准已经发展到了什么程度。+1。 - acenturyandabit

5

我知道这篇文章很旧,但我想添加我的答案!

你说要让用户注销而不进行重定向... 这种方法确实会重定向,但它会将用户返回到他们之前浏览的页面!这是我的实现:

// every page with logout button
<?php
        // get the full url of current page
        $page = $_SERVER['PHP_SELF'];
        // find position of the last '/'
        $file_name_begin_pos = strripos($page, "/");
        // get substring from position to end 
        $file_name = substr($page, ++$fileNamePos);
    }
?>

// the logout link in your html
<a href="logout.php?redirect_to=<?=$file_name?>">Log Out</a>

// logout.php page
<?php
    session_start();
    $_SESSION = array();
    session_destroy();
    $page = "index.php";
    if(isset($_GET["redirect_to"])){
        $file = $_GET["redirect_to"];
        if ($file == "user.php"){
            // if redirect to is a restricted page, redirect to index
            $file = "index.php";
        }
    }
    header("Location: $file");
?>

现在我们开始吧!

从完整的URL中获取文件名的代码并不是很稳定。例如,如果查询字符串中包含未转义的'/',它将失败。

然而,有许多脚本可以从URL中获取文件名!

祝编程愉快!

Alex


4

如果不使用 AJAX,用户点击链接时就不能在页面上运行 PHP。PHP 是一种服务器端脚本语言,在浏览器看到页面之后,其中就没有 PHP 了。

与 Javascript 不同,PHP 完全在服务器上运行,如果它们被咬了一口,浏览器就无法解释它。唯一调用 PHP 代码的方法是通过发出页面请求,要么刷新页面,要么使用 JavaScript 获取页面。

在 AJAX 解决方案中,页面基本上使用 JavaScript 向您域上的另一个页面发送页面请求。然后,JavaScript 获取您在响应中决定使用 echo 的任何内容,并可以解析它并从那里执行所需操作。在创建响应时,您还可以执行任何后端操作,例如更新数据库。


1
除非使用 AJAX,否则用户单击链接时无法运行 PHP。 - Al.
就像我说的那样。除非您请求一个新页面,否则无法运行PHP。 - Tyler Carter
1
PHP只有在请求页面时才会运行。 - Tyler Carter
是的,但您可以请求没有 AJAX 的 PHP 页面。AJAX 只是让您在不离开当前页面的情况下请求它。您的措辞让人觉得 AJAX 是所有使用 PHP 的必需品。 - ceejayoz
好的,我修改了措辞。我以为不离开页面是显而易见的,但是我猜有些人不愿意思考。 - Tyler Carter

2

你说过不需要重定向,那么这是一个 JavaScript 代码:

<a href="JavaScript:void(0);" onclick="function()">Whatever!</a>

<script type="text/javascript">
function confirm_delete() {
    var delete_confirmed=confirm("Are you sure you want to delete this file?");

    if (delete_confirmed==true) {
       // the php code :) can't expose mine ^_^
    } else { 
       // this one returns the user if he/she clicks no :)
       document.location.href = 'whatever.php';
    }
}
</script>

试一试吧 :) 希望你喜欢它


2
顺便说一句,这个 <a href="#" onclick="myJsFunction()">whatever</a>。<script> function myJsFunction() { // 使用 ajax 调用您的 PHP 脚本 // 更多示例,请使用 Jquery。请参考下面的链接 return false; // 这样浏览器就不会跟随链接 } <-- 刷新整个页面,所以我提供的那个不会 :) - Louie Jay Jayme

2

目前唯一更好的方法是使用AJAX,正如其他人在帖子中所建议的那样。 另一种选择是使用如下的IFrames:

<iframe name="f1" id="f1"> </iframe>

<a href='yourpage.php' target='f1'>Click </a>

现在您将在IFrame中获取输出(您可以在页面上放置IFrame或隐藏它,并从脚本中获取结果)。

希望无需Ajax解决方案,这会更好。


0
<a href='javascript:void(0)' id='yourId'>Click Me</a>

$(document).ready(function() {       
    $("#yourId").click(function() {
       $.get("yourpage.php");
       return false;;
    });
});

0
要么将用户发送到另一个执行此操作的页面。
<a href="exec.php">Execute PHP</a>

或者使用ajax完成

<script type="text/javascript">
// <![CDATA[
    document.getElementById('link').onclick = function() {
        // call script via ajax...
        return false;
    }
// ]]>
</script>
...
<a href="#" id="link">Execute PHP</a>

-1
这个也应该可以工作
<a href="#" onclick="callFunction();">Submit</a>

<script type="text/javascript">

function callFunction()
{
  <?php require("functions.php");  ?>
}
</script>

谢谢,

cowtipper


2
一个 PHP 的 require() 怎样能够从 JavaScript 的点击事件中触发? - billrichards

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接