php 没有从 ajax 接收字符串值

时间:2021-02-12 11:25:10

标签: javascript php ajax

我正在尝试通过 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 值,但也没有奏效。

2 个答案:

答案 0 :(得分:1)

您正在使用“发送”功能将数据放入 GET 请求中。 通过发送提交数据与 POST 和 PUT 相关。 GET & HEAD 的 send() 下的数据将被替换为 NULL。 如果您使用 GET 方法,请使用 URL 参数:

var url = 'includes/get_message.php?id=' + encodeURIComponent(id);

答案 1 :(得分:1)

几个问题:

  1. echo $msg_id; 应该在 PHP 中的 if 内。从逻辑上讲,如果没有填充,您不想回应这一​​点,我希望如此。

  2. 根据 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();

这里是正确的解决方案。

相关问题