数组在JavaScript中为非null,但在Ajax之后的PHP $ _POST中为null

时间:2015-03-24 23:07:01

标签: javascript php arrays ajax

我正在尝试制作一个简单的下载计数脚本,将数据发送到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。

2 个答案:

答案 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'];
 ?>

运行该脚本应提醒“反恐精英”