【发布时间】:2020-09-22 13:30:01
【问题描述】:
我是 php 和 javascript 的新手。我正在尝试使用 ajax 将一些变量发布到另一个 php 文件。从我的主 php 文件中,我有一个 javascript setInterval 调用一个函数以每 500 毫秒发送一次数据。调用的函数是:
function UpdateDB(xval, yval) {
TimeCount++;
// console.log(xval, yval, TimeCount);
$.ajax({
type: "POST",
url: "ud.php",
data: { x: xval.toString(), y: yval.toString(), t: TimeCount.toString() }
});
return TimeCount;
}
当我获得控制台日志数据时,这个函数运行良好(如果我取消注释)。我还可以在网络中的开发人员工具(chrome)中看到,文件 ud.php 似乎正在运行,但我不相信是这种情况。 ud.php 是一个更新表中数据的简单文件:
//<script type="text/javascript">console.log("ud");</script>
<?php
if (!isset($_SESSION['id'])) {
exit();
}
//require "includes/dbh.inc.php";
$sql = "UPDATE units SET JoyX='$x', SET JoyY='$y', SET JoyTimeStamp='$t', WHERE SN='$serial'";
//$sql = "UPDATE units SET JoyTimeStamp='$t' WHERE SeralNumber='$serial'";
mysqli_query($conn, $sql);
mysqli_close($conn);
exit();
?>
我在顶部写了注释掉的行以查看文件是否已运行,但取消注释时它不会记录到控制台。 我怀疑我的 ajax 查询格式不正确,但我还是新手,最近几天一直在寻找答案,但没有成功。 感谢您的帮助。
【问题讨论】:
-
网络选项卡是否说它从服务器收到 500 响应?那个 php sn-p 可以提出很多问题……还有更多吗?
-
如果您看到
ud.php在网络选项卡中被调用,那么它正在被调用。 PHP 文件中的脚本标签永远不会在控制台记录任何内容。 Ajax 响应中的 Javascript 不会被执行。当您进行 Ajax 调用时,该调用的响应只是作为字符串返回,而不关心内容,因此浏览器不会以任何方式解析响应。将成功回调添加到您的 ajax 代码和控制台记录响应。然后你就可以看到上面 PHP 代码中 PHP 向你抛出的所有错误(应该是一些错误和警告) -
另外,你在 php 中的那一点 JS,不一定会执行,因为你的 ajax 调用没有
success回调来踢 jquery 处理返回数据。 -
您是否在 ud.php 中使用顶部的
session_start()开始会话? -
警告:您对SQL Injections 持开放态度,应该使用参数化的prepared statements,而不是手动构建查询。它们由PDO 或MySQLi 提供。永远不要相信任何形式的输入!即使您的查询仅由受信任的用户执行,you are still in risk of corrupting your data。 Escaping is not enough!
标签: javascript php sql ajax