You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用PrototypeJS发起AJAX请求无响应,控制台无报错求助

解决PrototypeJS AJAX请求无反应的问题

我来帮你排查这个困扰你的问题——点击按钮后AJAX没反应且控制台无报错,大概率是请求发起了但没做反馈,或者存在容易忽略的细节问题,咱们一步步来解决:

1. 先确认PrototypeJS是否正确加载

虽然你说控制台没报错,但还是要先验证这一点:

  • 打开浏览器开发者工具的Network标签,刷新页面后查看prototype.js的请求状态,确保返回码是200 OK
  • 检查prototype.js的文件路径,确保它和当前PHP文件在同一目录,或者路径书写正确

2. 给Ajax.Request添加回调函数(核心问题)

Prototype的Ajax.Request默认是异步请求,但你没有设置任何回调逻辑,哪怕请求成功发出去了,你也看不到任何反馈,自然会觉得“没反应”。

修改你的stampa函数,添加onSuccessonFailureonComplete回调,这样就能在控制台看到请求状态,也能直观看到返回结果:

function stampa() {
  new Ajax.Request('http://localhost:8888/Prova_AJAX/query_3_php.php', {
    method: 'get', // 根据需求选择get/post
    onSuccess: function(response) {
      console.log('请求成功!返回内容:', response.responseText);
      alert(response.responseText); // 弹出返回结果,方便你直接看到
    },
    onFailure: function(response) {
      console.error('请求失败!状态码:', response.status);
      alert('请求失败,状态码:' + response.status);
    },
    onComplete: function(response) {
      console.log('请求完成,状态码:', response.status);
    }
  });
}

添加后再点击按钮,就能通过控制台和弹窗知道请求是否真的发起,以及服务器端的返回内容。

3. 验证请求路径的正确性

直接在浏览器地址栏输入http://localhost:8888/Prova_AJAX/query_3_php.php,确认能正常显示内容:

  • 如果显示Connection established,说明服务器端数据库连接正常
  • 如果显示数据库连接失败的错误信息,说明PHP文件里的数据库参数(用户名、密码、数据库名)有误
  • 如果提示404,说明文件路径写错了,要修正AJAX请求的路径

4. 改用更可靠的事件绑定方式

虽然你用了onClick属性绑定函数,但有时候可能因为DOM加载顺序问题导致函数未定义就绑定。推荐用Prototype的事件绑定方式,确保DOM加载完成后再绑定点击事件:

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title></title>
</head>
<body>
  <button type="button" id="stampa">Stampa</button>
  <script src="prototype.js"></script>
  <script>
    // 等待DOM加载完成后再绑定事件
    document.observe('dom:loaded', function() {
      $('stampa').observe('click', function() {
        new Ajax.Request('http://localhost:8888/Prova_AJAX/query_3_php.php', {
          method: 'get',
          onSuccess: function(response) {
            console.log('成功:', response.responseText);
            alert(response.responseText);
          },
          onFailure: function(response) {
            console.error('失败:', response.status);
          }
        });
      });
    });
  </script>
</body>
</html>

5. 排查服务器端PHP的问题

query_3_php.php开头添加错误输出代码,确保能看到PHP的错误信息:

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

# connect to database
$servername = "localhost";
$username = "root";
$password = "root";
$db_name = "Chat";

try {
  $db = new PDO("mysql:host=$servername;dbname=$db_name", $username, $password);
  $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  echo "Connection established";
} catch(PDOException $e) {
  echo "Connection failed: " . $e->getMessage();
  die;
}
?>

如果数据库连接失败,直接访问该PHP文件就能看到具体的错误原因,比如密码错误、数据库不存在等。


内容的提问来源于stack exchange,提问作者Lorenzo

火山引擎 最新活动