使用AJAX向PHP API提交数据时user字段丢失问题求助
问题分析与解决方案
你遇到的核心问题是表单默认提交行为未被阻止,导致AJAX请求被中断,浏览器反而执行了表单的默认GET提交,这就是你看到不带user参数的TraderBook.php请求地址的原因。
问题根源
你在提交按钮的点击事件里注释掉了event.preventDefault();——这行代码的核心作用是阻止浏览器触发表单的默认提交行为。没有它的话,点击按钮时会同时发生两件事:
- 你的AJAX请求尝试向
api.php发送包含user字段的POST数据 - 浏览器按照表单默认规则(若未设置
action,则提交到当前页面TraderBook.php)发起GET请求,但表单里没有user字段,所以这个请求自然看不到user参数
更关键的是,表单默认提交会刷新页面,导致AJAX请求还没完成就被中断,所以你实际看到的是表单提交的结果,而非AJAX请求的内容。
修复步骤
- 取消注释
event.preventDefault();,这是最关键的一步:
$("#submit").click(function(event){ event.preventDefault(); // 必须取消注释,阻止表单默认提交 var oPrice = newOrder.elements["oPrice"].value; var cPrice = newOrder.elements["cPrice"].value; var oType = newOrder.elements["oType"].value; var oSymbol = newOrder.elements["oSymbol"].value; var oAmount = newOrder.elements["oAmount"].value; var json ={ 'user': user, 'oPrice': oPrice, 'cPrice': cPrice, 'oType': oType, 'oSymbol': oSymbol, 'oAmount': oAmount }; console.log(JSON.stringify(json)); // 用console.log替代alert,更友好的调试方式 $.ajax({ type: "POST", url: "api.php", data: json, success: function (response) { alert(response); } }); });
验证
user变量的作用域:
你的user变量是在$(document).ready()里定义的,提交按钮的点击事件也在同一个作用域内,理论上可以正常访问。如果仍有问题,可以在点击事件里加一行console.log(user),确认它的值是否正确输出。额外调试建议:
打开浏览器开发者工具(F12),切换到Network标签页,点击提交按钮后查看发送的请求:
- 确认请求地址是
api.php,请求方法为POST - 检查请求参数里是否包含
user字段
这样能直观验证AJAX请求是否正确发送。
内容的提问来源于stack exchange,提问作者Dominik Makovec
相关产品推荐
相关产品推荐

