javascript - xmlhttp 请求后未定义 $_POST

标签 javascript php mysql ajax xmlhttprequest

我的代码向 php 文件发出 xmlhttp 请求,发送 ID,以便可以识别记录并将其从数据库中删除。但是,在执行删除查询时,我收到一条错误消息,指出“comicID”未定义(该变量使用 POST 发送的 ID 值)。我不确定如何确保它的定义正确。目前,我从错误处理中返回的错误是:“未提供漫画。”删除 ISSET 代码部分时出现的错误是:“错误。漫画中的页面未删除。”目前来看,删除查询不起作用。

Javascript:

function delComic()
        {
            var radioButtons = $("#listID input:radio[name='comicList']");
            var radioID = radioButtons.index(radioButtons.filter(':checked'));
            console.log(radioID);
            if (radioID < 0)
            {
                window.alert("You must select a comic before deleting.");
            }
            else
            {
                var xmlhttp = new XMLHttpRequest();
                var url = "delCom.php?comicID="+radioID;

                xmlhttp.onreadystatechange=function()
                {   
                    if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
                    {
                        var message = xmlhttp.responseText;
                        loadComic();
                        window.alert(message);
                    }
                }
                xmlhttp.open("POST", url, true);
                xmlhttp.send();
            }

        }

PHP:

<?php

if (isset($_POST["comicID"])) 
{
$comic = $_POST["comicID"];
$dir = 'comics/'.$comic.'/';

if (!file_exists($dir)) 
{
    mkdir($dir, 0777, true);
}

include_once('includes/conn.inc.php');

mysqli_query($conn, "DELETE FROM serieslink WHERE comicID = '$comic'");
$query = ("DELETE FROM page WHERE comicID = '$comic'"); 
if (!$result = mysqli_query($conn, $query))
{
    echo ("Query1 error: " . mysqli_error($conn));
    exit;
}
else
{
    if (mysqli_affected_rows($conn) > 0)
    {
        $dirHandle = opendir($dir);
        while($file = readdir($dirHandle))
        {
            if(!is_dir($file))
            {
                unlink("$dir"."$file");
            }
        }
        closedir($dirHandle);

        rmdir($dir);
        $query2 = ("DELETE FROM comic WHERE comicID = '$comic'");
        if (!mysqli_query($conn, $query2))
        {
            echo ("Query2 error: " . mysqli_error($conn));
            exit;
        }
        else
        {
            if (mysqli_affected_rows($conn) > 0) 
            {
                echo ("The selected comic was successfully deleted.");
            }
            else
            {
                echo ("Error. Comic not deleted.");
            }
        }
    }
    else
    {
        echo "Error. Pages in comic not deleted.";
    }
}   
$conn->close();
}
else
{
$comic = null;
echo "No comic supplied";
}

?>

最佳答案

使用 POST 时,您的 Ajax 请求与使用 GET 时不同。查询字符串是 send() 函数的参数,而不是 url 的一部分,并且您省略了 ?:

            var xmlhttp = new XMLHttpRequest();
            var url = "delCom.php";

            xmlhttp.onreadystatechange=function()
            {   
                if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
                {
                    var message = xmlhttp.responseText;
                    loadComic();
                    window.alert(message);
                }
            }
            xmlhttp.open("POST", url, true);
            xmlhttp.send("comicID="+radioID);

编辑:

您还确实应该对参数值进行 urlencode,如果它们可以包含空格等。为了避免可能的浏览器缓存,您可以添加一个带有时间的参数:

var d = new Date();
xmlhttp.send("comicID="+encodeURIComponent(radioID)+"&ts="+d.getTime());

无需在服务器端读取时间戳参数;它只是为了欺骗浏览器。

关于javascript - xmlhttp 请求后未定义 $_POST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28731406/

相关文章:

javascript - Express js路由更新问题

php - JavaScript 在使用 DOCTYPE 时失去图像移动功能

php - Laravel 中的发布/输入动态字段

php - 对 ZenCart 的地址簿条目执行加入

php - 我如何在 php 中使用 sql 进行编辑

mysql - 如何将这两个sql合并为一个sql?

javascript - 重定向后从 url 中删除参数

javascript - 如何将值从 gridview 传递给 javascript 函数

PHP 下载 excel 文件损坏

php和mysql foreach只显示第一条记录四次