将变量传递给PHP时,Ajax post不起作用

时间:2014-02-10 21:20:03

标签: javascript php jquery ajax variables

在阅读其他类似的问题时,我已经了解到要将javascript值发送到PHP变量,我需要使用AJAX。这就是我到目前为止所做的:

function onCursorChanged(e, data) {
    $.post('familytree.php', {id: data.context.id});
    <?php
    if (isset($_POST['id'])) {
        $id = $_POST['id'];
    }
    else {
        $id = $individualid;
    }
    ?>
}

问题在于,当我检查是否发布id时,它总是转到else语句(id总是等于individualid)。但是,当我将代码更改为:

function onCursorChanged(e, data) {
        $.post('familytree.php', {id: data.context.id, 
                                      success: function (msg){ 
                                           alert('success') },
                                      error: function (err){ 
                                           alert(err.responseText)}
                                      });
        <?php
        if (isset($_POST['id'])) {
            $id = $_POST['id'];
        }
        else {
            $id = $individualid;
        }
        ?>
    }

编辑:上面的代码混合不正确,因为我一直在做很多实验。原始代码:

<script type="text/javascript">

    function onCursorChanged(e, data) {
    $.post('familytree.php', {id: data.context.id});
    }
    </script>

        <?php
        if (isset($_POST['id'])) {
            $id = $_POST['id'];
                                }
            else {
                $id = $individualid;
            }
        $this->displayLeafEditForm ($_SESSION['username'], $id, $this->getParents($id));

感谢所有答案,我意识到id没有设置,这就是为什么我无法在php中获取值。但我不明白为什么因为data.context.id是每次点击后点击并设置的项目的ID。

我收到的消息是“成功”。知道为什么我不能发布我的变量?

2 个答案:

答案 0 :(得分:1)

这里的一个大问题是你错误地混合了PHP和JavaScript。您希望在JavaScript进入客户端之前在JavaScript中设置$_POST['id']。但是当JavaScript到达客户端时,PHP处理已经完成。

这意味着当$.post()发生时,服务器已经确定if (isset($_POST['id']))是否为真。服务器将输出(JavaScript)发送到客户端,然后不再进行PHP处理。

此外,您正在传递idsuccesserror作为数据,这几乎肯定不是您想要的。你想要这个:

$.post('familytree.php',
    {id: data.context.id},
    success: function (msg){ 
        alert('success')
    },
    error: function (err){ 
        alert(err.responseText)
    }
);

答案 1 :(得分:0)

AJAX success函数关心异步调用是否发生而没有错误。您甚至到达if (isset(...))(并且未设置任何错误代码,例如header(...))这一事实意味着AJAX调用成功。

如果isset返回false,则需要仔细查看AJAX调用实际发送给PHP的信息。尝试输入print_r($_POST)以查看您实际获得的帖子值。