xmlhttp请求后未定义$_POST
Undefined $_POST after xmlhttp request
我的代码向php文件发出xmlhttp请求,发送一个ID,以便识别记录并从数据库中删除。然而,在执行删除查询时,我收到一个错误,说"commicID"未定义(使用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,您可以执行与GET不同的Ajax请求。查询字符串是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);
编辑:
如果参数值可以包含空格等,您也应该对其进行url编码。为了避免可能的浏览器缓存,您可以添加一个随时间变化的参数:
var d = new Date();
xmlhttp.send("comicID="+encodeURIComponent(radioID)+"&ts="+d.getTime());
不需要在服务器端读取时间戳参数;这只是为了欺骗浏览器。
将前三行更改为,一切都会正常工作。
if (isset($_GET["comicID"]))
{
$comic = $_GET["comicID"];
实际上我自己意外地解决了这个问题。事实证明,错误在于程序在试图删除与漫画相关的所有页面时停止。当它呈现一个已经空了的漫画时,它试图删除不存在的记录。手动在漫画中添加一页,然后尝试直接删除漫画,效果非常好。
所以基本上,我只需要对空漫画进行错误处理。不过,感谢您提供有关POST的建议。
相关文章:
- 使用javascript ajax post方法的未定义偏移PHP错误
- x可编辑的post值未定义
- jQuery$.post可以在chrome、safari中工作,但不能在FF中工作(声明成功回调函数未定义)
- 从 Angular 数据工厂中的 HTTP POST 请求接收未定义的结果
- Jquery Ajax POST方法不工作,返回未定义的值
- 从一个函数传递到另一个函数的变量在使用jQuery的.post之后变得未定义
- 无法读取属性'用户名'对于Angular Post Request,共个未定义
- 类型错误:无法读取 Nodejs 中未定义的属性“post”
- 使用 Jquery post 获取多个值获取未定义的值
- Nodejs - Req.body 未定义在 post 中,带有快速 4.9.0
- 未定义的 ajax post with for 循环和字符串选择器
- 未捕获的引用错误:函数 Post() 未定义
- 当使用jQuery发出$.post请求时,返回的数据是未定义的
- AJAX调用中缺少POST参数会导致PHP脚本中出现未定义的索引警告
- $http.post在控制台中返回未定义的错误
- 更改AJAX未定义的变量,以便post可以工作
- 未定义的函数:$http.post 中的 .succes (角度.js)
- 发送post请求并获得错误“未定义”不是一个函数
- Javascript -从$.post回调后,实例类的属性未定义
- 为什么响应xmlhttprequest post命令在Node JS是未定义的