不清楚ajax post的语法

Posted

技术标签:

【中文标题】不清楚ajax post的语法【英文标题】:Not clear on syntax of ajax post 【发布时间】:2020-09-22 13:30:01 【问题描述】:

我是 phpjavascript 的新手。我正在尝试使用 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的语法的主要内容,如果未能解决你的问题,请参考以下文章

JSON&Ajax(语法格式+解析json)

利用ajax实现与php数据交互,并局部刷新页面

ajax语法

Jquery中ajax基本语法

jQuery Ajax Post 更改对象结构

python测试开发django-130.jQuery中$.ajax()方法发GET/POST/DELETE请求