我正在尝试通过 ajax 将点击元素的 id 发送到 php。但它不起作用。该值从 php 文件 (contacts.php) 发送到 javascript 函数 callMessage(id)(单击时会返回正确的 id),然后调用应该查询的 php 文件 (get_message.php)具有正确 ID 的结果。但是当我回显 id 时,它返回“未定义的变量”。
这是我的代码:
contacts.php
<div id="<?php echo $row['id']; ?>" onclick="callMessage(this.id)">
</div>
<div id="createMsg"></div>
contacts.js
function callMessage(id) {
var http = new XMLHttpRequest();
var url = 'includes/get_message.php';
http.open('GET', url, true);
http.onreadystatechange = function() {
if(http.readyState == 4 && http.status == 200) {
document.getElementById("createMsg").innerHTML = this.responseText;
}
}
console.log(id);
http.send('id='+id);
}
这里的 console.log(id) 确实返回被点击的元素的 id。
get_message.php
if(isset($_GET['id'])) {
$msg_id = $_GET['id'];
}
echo $msg_id;
这里的回显返回“未定义变量:msg_id”。我也尝试过使用 POST 请求发送 id 值,但也没有奏效。
答案 0 :(得分:1)
您正在使用“发送”功能将数据放入 GET 请求中。 通过发送提交数据与 POST 和 PUT 相关。 GET & HEAD 的 send() 下的数据将被替换为 NULL。 如果您使用 GET 方法,请使用 URL 参数:
var url = 'includes/get_message.php?id=' + encodeURIComponent(id);
答案 1 :(得分:1)
几个问题:
echo $msg_id;
应该在 PHP 中的 if
内。从逻辑上讲,如果没有填充,您不想回应这一点,我希望如此。
根据 https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/send,'id='+id
将添加到请求正文中,而 PHP 中的 $_GET
尝试从查询字符串中检索值。因此,您需要将该值附加到您的 url
变量,并对其进行 url 编码。
所以
if(isset($_GET['id'])) {
$msg_id = $_GET['id'];
echo $msg_id;
}
else echo "No ID supplied";
和
var url = 'includes/get_message.php?id=' + encodeURIComponent(id);
...
http.send();
这里是正确的解决方案。