我正在尝试制作一个简单的下载计数脚本,将数据发送到MySQL数据库。我创建了一个关联数组,我通过Ajax发送到PHP脚本,但是,尽管我已经确认数组包含我在JavaScript中放入的内容,但我的PHP中的$ _POST变量是空的。
这就是我的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。
答案 0 :(得分:1)
您的服务器设置为自动重定向
请求
http://strongjoshua.com/phpScripts/downloadCounter.php
到
http://strongjoshua.com/phpScripts/downloadCounter
现在,因为浏览器使用方法GET来跟踪此类重定向,所以当您的脚本最终被“调用”时,不再有POST数据。
只需更改
$.ajax({
url: "phpScripts/downloadCounter.php",
首先使用“正确”的地址,
$.ajax({
url: "phpScripts/downloadCounter",
- 这样,服务器不需要首先重定向到“最终”地址,使用调用脚本的请求方法保持 POST - 然后在{{1根据需要。
答案 1 :(得分:0)
的Javascript
<script>
function download(name) {
var postData =
{
"fileName":name
}
$.ajax({
url: "phpScripts/downloadCounter.php",
type: 'POST',
data: {myData:postData},
success: function(output_string){
alert(output_string);
}
});
//window.location = "downloads/" + name;
}
download('Counter Strike');
</script>
PHP
<?php
echo $_POST['myData']['fileName'];
?>
运行该脚本应提醒“反恐精英”