不清楚ajax post的语法
Posted
技术标签:
【中文标题】不清楚ajax post的语法【英文标题】:Not clear on syntax of ajax post 【发布时间】: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!
【参考方案1】:
PHP 文件被成功调用,您只是对结果有一个无效的期望。检查浏览器调试工具中的网络选项卡。请求/响应中是否有任何错误代码?响应是否包含您期望的信息?如果是这样,那么它正在工作。
问题是……你对这个回复做了什么?
AJAX 操作本身不会对响应做任何事情。但它让你有机会用它做点什么。例如,在您正在使用的 jQuery .ajax()
调用中,有一个 success
回调,它会在成功的结果上被调用。所以你可以这样做:
$.ajax(
type: "POST",
url: "ud.php",
data: x: xval.toString(), y: yval.toString(), t: TimeCount.toString() ,
success: function ()
console.log("ud");
);
因此,您无需尝试从服务器返回新的 JavaScript,而是在此处编写要在操作成功完成时调用的 JavaScript。 (或者,您可以使用 error
回调来处理失败的响应。)
如果你想从服务器发回数据,任何你回显到响应中的东西都可以作为success
函数的第一个参数。例如,如果您在服务器上执行此操作:
echo "ud";
然后在success
回调中,您可以显示该文本:
success: function (result)
console.log(result);
【讨论】:
我没有对响应做任何事情。由于每 500 毫秒会进行一次新更新,因此我不介意错过一次。我可以在调试期间使用响应来检查是否发生了某些事情,但我一直依靠刷新表来查看值是否已更改。至少 TimeCount 值在表中应该是不同的,因为每次调用函数时它都会递增,即使其他值 xval 和 yval 没有改变。 @DaveEverett:由于 AJAX 请求正在运行,下一步将是调试 PHP 代码。例如,SQL 查询似乎依赖于未定义的变量,因此不执行错误检查。查看mysqli_error
以检查错误。 (绝对是start here 用于修复您的查询。)在执行之前输出或记录您的 SQL 查询本身,以查看您实际尝试执行的内容。无论问题最终是什么,都值得提出一个新的 Stack Overflow 问题。
感谢大家的建议,我有很多事情要考虑。以上是关于不清楚ajax post的语法的主要内容,如果未能解决你的问题,请参考以下文章