我试图制作一个简单的下载计数脚本,将数据发送到MySQL数据库。我通过Ajax将一个关联数组发送到一个PHP脚本,但是,虽然我已经确认数组包含了我在JavaScript中放入的数据,但$ _POST变量在我的PHP中为空。
这是我的JavaScript函数是什么样子:
function download(name) {
var post = {};
post['fileName'] = name;
$.ajax({
url: "phpScripts/downloadCounter.php",
type: 'POST',
data: post
});
window.location = "downloads/" + name;
}
然后,我的PHP脚本(downloadCounter.php)内我有这个检查$ _ POST变量:
ob_start();
var_dump($_POST);
error_log(ob_get_clean());
error_log($_POST["fileName"]);
后续代码var_dump发布长度为0的数组,并且直接检索数据的尝试会导致错误,指出索引“fileName”未定义。
相关页面是http://strongjoshua.com/projects/software/line_counter。按下下载按钮后,Chrome会向脚本文件报告一个POST,其中包含返回代码302(找到文件),实际下载文件的GET,以及最后一次GET脚本文件。 这使得它看起来像POST请求只能发现文件,而不是实际执行它...为什么/这是怎么发生的?
我已经完成了Ajax请求的这种形式,并且它一直工作,所以我迷失在为什么它现在不工作。我在由EasyDNS的虚拟主机托管的服务器上使用PHP 5.6。
检查浏览器开发人员工具以查看传出的HTTP请求的外观。 – Pointy 2015-03-24 23:12:40
在重新加载页面之前就开始XHR并不是一个真正安全的选择;浏览器不会等待XHR完成,但服务器*应该*得到它。您应该能够知道开发者控制台的HTTP请求信息中的POST参数是什么样子,如果您有服务器端日志记录,则可以看到接收到的信息。 – Pointy 2015-03-24 23:34:31
但是,不重新加载页面?它只下载文件。还是我误解了这个?该页面没有改变(尽管我明白我在技术上重定向),但只有该文件被下载。如果这是错误,那么我该如何让客户端下载一些东西(idk,如果我希望成功功能是下载,以防万一他们是数据库错误,我仍然希望用户能够下载)? – StrongJoshua 2015-03-25 00:00:17