Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/477.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/1/php/290.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
Javascript 使用jQuery/AJAX在用户单击事件上运行php脚本_Javascript_Php_Jquery_Ajax - Fatal编程技术网

Javascript 使用jQuery/AJAX在用户单击事件上运行php脚本

Javascript 使用jQuery/AJAX在用户单击事件上运行php脚本,javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,我有一个php脚本,当用户单击按钮时,我需要使用jQuery/AJAX运行该脚本。我有一个jQuery脚本,应该在用户单击按钮时启动。然而,事件实际上并没有触发。有人能帮我吗 讲师.php <div id="instructor"> <?php echo "<img id=instructor_image src=" .$_SESSION["image"] .">"; echo "<h1>" .$_SESSION[

我有一个php脚本,当用户单击按钮时,我需要使用jQuery/AJAX运行该脚本。我有一个jQuery脚本,应该在用户单击按钮时启动。然而,事件实际上并没有触发。有人能帮我吗

讲师.php

<div id="instructor">
    <?php
        echo "<img id=instructor_image src=" .$_SESSION["image"] .">";
        echo "<h1>" .$_SESSION["user"] ."</h1>";
        echo "<span><p>" .$_SESSION["program"] ."</p> - <h2>" .$_SESSION["role"] ."</h2></span>";
        echo "<a href=mailto:" .$_SESSION["email"] .">" .$_SESSION["email"] ."</a>";
    ?>
    <button class="button" name="logout" id="logout">Logout</button>
</div>
<?php
    require("../includes/header.php");

    $loggedout = "UPDATE `$user_table` SET `logged_in`=0 WHERE `user_id`='$user_id'";
    mysqli_query($connect, $loggedout);
    session_unset();
    session_destroy();
    mysqli_close($connect);
    header("Location: ../pages/logged_out.php");
?>
logout.php

<div id="instructor">
    <?php
        echo "<img id=instructor_image src=" .$_SESSION["image"] .">";
        echo "<h1>" .$_SESSION["user"] ."</h1>";
        echo "<span><p>" .$_SESSION["program"] ."</p> - <h2>" .$_SESSION["role"] ."</h2></span>";
        echo "<a href=mailto:" .$_SESSION["email"] .">" .$_SESSION["email"] ."</a>";
    ?>
    <button class="button" name="logout" id="logout">Logout</button>
</div>
<?php
    require("../includes/header.php");

    $loggedout = "UPDATE `$user_table` SET `logged_in`=0 WHERE `user_id`='$user_id'";
    mysqli_query($connect, $loggedout);
    session_unset();
    session_destroy();
    mysqli_close($connect);
    header("Location: ../pages/logged_out.php");
?>
因为

ajax.open("../php/logout.php", "POST", true);
这是错误的。是的

因此,将代码更改为

$("#logout").on("click", function(){
    ajax = new XMLHttpRequest();
    ajax.open("POST", "../php/logout.php", true);
    ajax.onreadystatechange = function () {
        if (xmlhttp.readyState==4) console.log("done");
    }
    ajax.send();
});
因为您使用的是jQuery,所以只需

$("#logout").on("click", function(){
    $.post("../php/logout.php", function() { console.log("done") } );
});

有些东西很奇怪-
标题(“位置:../pages/logged_out.php”)是否要在用户单击后执行重定向?如果是这样的话,你应该在js中这样做

我会改变

$(document).ready(function(){
    $("#logout").on("click", function(){
        $.post("../php/logout.php",{},function(response){
            if(response.success == "1"){
                location.replace("../pages/logged_out.php");
            } else {
                //handle error
            }
        },'json');
    })
})
和php:

<?php
    ob_start();
    require("../includes/header.php");
    ob_clean();
    $loggedout = "UPDATE `$user_table` SET `logged_in`=0 WHERE `user_id`='$user_id'";
    mysqli_query($connect, $loggedout);
    session_unset();
    session_destroy();
    mysqli_close($connect);
    echo json_encode(array('success'=>1));
?>

它被包装在一个dom就绪的函数中,这个事件是一个更大的js文件的一部分,我不认为包含整个脚本是一个好主意,但为了避免混淆,我将在这里的函数中包装它。代码看起来很好,无需自己打开并运行它,只需检查上面的“就绪”并打开开发工具,通过查看页面发出的请求,检查ajax是否真的成功加载了“../php/logout.php”。因此,我需要执行$.post语句,而不是执行ajax.send()。您可以替换打开的行,也可以删除所有ajax代码,并将其替换为一行。是的,我正在运行脚本,然后在用户单击按钮时重定向。我不熟悉
ob
函数。ob函数捕获输出,可以将其存储在变量中,也可以回显或丢弃。必须删除任何回显以返回正确的json字符串。-关于输出控制函数的更多信息,我将对此进行研究。谢谢,很好用。非常感谢。