使用Ajax PHP返回空文件

时间:2015-06-09 04:03:14

标签: javascript php jquery ajax download

我有一个JSON字符串,当我触发按钮时,我会通过Ajax调用。 我希望能够做到和理解的第一件事就是将变量传回生成的文件而不将其保存到服务器。

这里发生的奇怪事情是变量值由回调函数检索并由alert(data)调用显示, POST变量被识别为空,而JS脚本将我带到一个空白的process-data.php页面。

当取消empty()条件时,我仍然可以正确显示变量 但是没有一个空白页面,我得到一个0字节的文件下载。

这可能是服务器问题,因为我正在运行MAMP吗?

感谢您的回答。

这是HTML代码

<button onclick="aCall()" button type="submit" formmethod="post"> DL "x" value as text </button>

Ajax代码:

function aCall(){
    $.ajax({
         url: 'process-data.php',
         type: 'POST',
         data: {'value': [{x:250,y:300}]}, //that's an example
         success: function(data){
               alert(data);
               window.location = 'process-data.php';
          }
    });
}

这是PHP代码:

<?php
   if (!empty($_POST['value'])) //I get a blank page with that condition on and a file if off.
   {
       $filename = 'test.txt';

       header("Content-Description: File Transfer");
       header("Content-Length: ". filesize("$filename").";");
       header("Content-Disposition: attachment; filename=$filename");
       header("Content-Type: application/octet-stream; "); 
       header("Content-Transfer-Encoding: binary");
       header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
       header('Expires: 0');
       header('Pragma: public');

       echo $_POST['value'][0]['x'];
       exit;

    }
?>

总之,这就是我得到的。

HTML -> AJAX -> PHP -> echo myValue
                             |
                             |
       empty file <----------|
       or Blank page         |
                             |
       popup                 |
       showing the <---------'
       variable's 
       value

1 个答案:

答案 0 :(得分:1)

像这样修改,不需要json_decode

if (!empty(json_decode($_POST['value']))) 

if(isset($_POST['value']) && !empty($_POST['value']))

echo $json[0]->x;

echo $_POST['value'][0]['x'];