在阅读其他类似的问题时,我已经了解到要将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。
我收到的消息是“成功”。知道为什么我不能发布我的变量?
答案 0 :(得分:1)
这里的一个大问题是你错误地混合了PHP和JavaScript。您希望在JavaScript进入客户端之前在JavaScript中设置$_POST['id']
。但是当JavaScript到达客户端时,PHP处理已经完成。
这意味着当$.post()
发生时,服务器已经确定if (isset($_POST['id']))
是否为真。服务器将输出(JavaScript)发送到客户端,然后不再进行PHP处理。
此外,您正在传递id
,success
和error
作为数据,这几乎肯定不是您想要的。你想要这个:
$.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)
以查看您实际获得的帖子值。