使用PrototypeJS发起AJAX请求无响应,控制台无报错求助
解决PrototypeJS AJAX请求无反应的问题
我来帮你排查这个困扰你的问题——点击按钮后AJAX没反应且控制台无报错,大概率是请求发起了但没做反馈,或者存在容易忽略的细节问题,咱们一步步来解决:
1. 先确认PrototypeJS是否正确加载
虽然你说控制台没报错,但还是要先验证这一点:
- 打开浏览器开发者工具的Network标签,刷新页面后查看
prototype.js的请求状态,确保返回码是200 OK - 检查
prototype.js的文件路径,确保它和当前PHP文件在同一目录,或者路径书写正确
2. 给Ajax.Request添加回调函数(核心问题)
Prototype的Ajax.Request默认是异步请求,但你没有设置任何回调逻辑,哪怕请求成功发出去了,你也看不到任何反馈,自然会觉得“没反应”。
修改你的stampa函数,添加onSuccess、onFailure和onComplete回调,这样就能在控制台看到请求状态,也能直观看到返回结果:
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




