2015-03-24 75 views
1

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

+0

检查浏览器开发人员工具以查看传出的HTTP请求的外观。 – Pointy 2015-03-24 23:12:40

+0

在重新加载页面之前就开始XHR并不是一个真正安全的选择;浏览器不会等待XHR完成,但服务器*应该*得到它。您应该能够知道开发者控制台的HTTP请求信息中的POST参数是什么样子,如果您有服务器端日志记录,则可以看到接收到的信息。 – Pointy 2015-03-24 23:34:31

+0

但是,不重新加载页面?它只下载文件。还是我误解了这个?该页面没有改变(尽管我明白我在技术上重定向),但只有该文件被下载。如果这是错误,那么我该如何让客户端下载一些东西(idk,如果我希望成功功能是下载,以防万一他们是数据库错误,我仍然希望用户能够下载)? – StrongJoshua 2015-03-25 00:00:17

回答

1

您的服务器设置为自动重定向为
http://strongjoshua.com/phpScripts/downloadCounter.php
的请求
http://strongjoshua.com/phpScripts/downloadCounter

现在,因为浏览器使用方法GET来跟踪这样的重定向,所以当您的脚本最终被“调用”时,不再有POST数据。

简单地改变

$.ajax({ 
    url: "phpScripts/downloadCounter.php", 

首先使用“正确”的地址,

$.ajax({ 
    url: "phpScripts/downloadCounter", 

- 这样,服务器将不需要重定向到“最后”地址第一,您的脚本被称为的请求方法保留 POST - 并且您根据需要在$_POST中获取数据。

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

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

+0

我不明白这是如何不同于我做的。你所做的只是把post数组放在另一个数组中并传递它。为什么会有所作为?它没有顺便说一句。 – StrongJoshua 2015-03-25 00:05:04

+0

我测试过了,这就是我发布的原因。 @StrongJoshua – 2015-03-25 00:07:49

+0

您注释了实际的下载。我认为这是问题所在。检查我对我的问题的最后评论。 – StrongJoshua 2015-03-25 00:08:53