【问题标题】:Run php code when clicking on link单击链接时运行php代码
【发布时间】:2012-11-27 05:03:02
【问题描述】:

当用户点击链接时,我需要执行一些 php 代码。我找到了答案here,并在网站标题中写了这个:

<script type="text/javascript">
function sottoponi() {
$.get("sottoponi.php");
return false;
}
</script>

在正文中,我需要代码:

<a href="#" onclick="sottoponi();">Prova</a>

然后我在 sottoponi.php 上写了这个

<?php 
$variable= value; 

if ($variable < 1) {
// do some php code;
}

else if ($variable > 1) {
$jav1 = <<<MAR1
<script language="javascript" type="text/javascript">
alert("Error!");
</script>
MAR1;
echo $jav1;
}

?>

我确定我做错了,因为我没有收到警报(而且我确定 $variable > 1 是真的,我回应了变量!):我如何从 sottoponi 传递信息。 php 到实际页面?

【问题讨论】:

标签: php javascript jquery ajax variables


【解决方案1】:

您没有收到alert,因为您生成的 js 代码未添加到页面中。要运行它,您需要从 ajax 请求中获取响应并将其添加到 DOM:

function sottoponi() {
    $.get("sottoponi.php", function(response){
        $('body').append(response);
    });
    return false;
}

请注意,此解决方案不是很优雅。在这种情况下,我会用我的 PHP 中的 JSON 进行响应,因此我们可以很容易地从 js 端知道操作是否成功:

function sottoponi() {
    $.getJSON("sottoponi.php", function(response){
        if(response.error !== false) {
            alert("ERROR!");
        }
    });
    return false;
}

对应的 PHP 将是:

<?php 
$variable = value; 
$response = array('error' => false);

if ($variable < 1) {
    // some php logic;
} else if ($variable > 1) {
    $response['error'] = true;
} else {
   // some more logic here if needed
}
echo $json_encode($response);
?>

【讨论】:

  • 为什么不在成功回调中使用适当的 xhr 请求并在需要时提醒响应,而不是向 DOM 添加脚本标记?
  • 这是首选的方法,是的。我的答案只是让当前代码工作的最短路径。
  • 问题是:我这辈子从来没有用过Ajax,我想在写代码之前我需要学习一下。无论如何,感谢您的回答,但我认为还有其他错误,因为它仍然无法正常工作。
  • @SheHulk 添加了更优雅的解决方案。
  • 确保您的 HTML 链接到 jQuery,并检查浏览器控制台是否有错误(按 F12)。
【解决方案2】:

如果您想发送整个脚本并对其进行处理,您应该使用 jQuery 的 getScript 函数:$.getScript("sottoponi.php");,尽管将回调函数传递给 get() 来处理结果会更容易混淆:

$.get("sottoponi.php", function(res) {
    alert(res);
});

其中,如果是复杂的结构,可以用PHP的json_encode编码。

【讨论】:

    【解决方案3】:

    您使用的是jQuery.get(),它是jQuery.ajax() 的简写。因此,以下是您可以提交到 sottoponi.php 的一种可能更清晰的方法:

    $.ajax({
        url: "sottoponi.php",
            type: "POST",
            success:function(result){
                //You can place an alert here such as: alert("Successful Ajax Request Complete");
            }
    });
    

    【讨论】:

      【解决方案4】:

      呵呵,我们澄清一下:-)。好吧,我告诉你。该过程的顺序与该评论相反。将在表中记录第一个数据,然后继续下载。利用我给你的代码,我们将有: if (empty ($ _GET ['filename']) { $ query = "INSERT INTO LOWERED VALUES ('". $ program. "', '". $ username. "' '".$time."') " if ($result = mysql_query($query, $link)) { // 记录正确 } else { // 没有记录记录 } // 继续下载。header("location :".$ program); } else { echo "Error. Invalid file"; } 希望这会有所帮助(我没有深入研究代码,因为没有连接到数据库服务器,基础的选择等。 ..),但基本上会。当然,你可以修改它并将表头放在 if 中,当正确记录在表中时,可以更好地控制下载。问候。

      【讨论】:

        【解决方案5】:

        您混合使用 PHP 和 Javascript。您不能在 PHP 代码中调用 alert()。如果你想要alert(),你必须在 Javascript 中这样做

        <script type="text/javascript">
        function sottoponi() {
        $.get("sottoponi.php");
        alert("Error!");
        return false;
        }
        </script>
        

        【讨论】:

        • alert 是 php 作为对请求的响应发送的 javascript 的一部分。
        猜你喜欢
        • 2016-09-30
        • 2012-05-01
        • 2010-11-19
        • 2010-12-09
        • 2014-02-24
        • 2020-05-10
        • 2021-09-16
        • 2014-06-28
        • 1970-01-01
        相关资源
        最近更新 更多