0

编辑

在示例中添加了一行来散列密码,这样人们就不会分心。


我有一个服务器端 php 文件,它检查帖子参数以进行验证,如果参数有效,则下载动态生成的文件。如果参数无效,则 php 返回 json 并说明原因。我似乎找不到从 javascript 调用我的 php 并处理这两种情况的方法。

我的 php 看起来像这样(简化):


PHP

<?php
     if(isset($_POST['Username']) && isset($_POST['Password']))
     {

     $dbPassword = *sql statement*
     $password = hash("sha256", $_POST['Password']);

     if($dbPassword==$password)
     {

     header('Content-Description: File Transfer');
     header('Content-Type: application/octet-stream');
     header('Content-Disposition: attachment; filename= 'somefile.zip');
     header('Content-Transfer-Encoding: binary');
     header('Expires: 0');
     header('Cache-Control: must-revalidate');
     header('Pragma: public');
     header('Content-Length: ' . filesize('somefile.zip'));
     ob_clean();
     flush(); 
     $bytesRead = readfile('somefile.zp');


    }
    else
    {

    $returnArray = array();

    $returnArray['Status']='Invalid'

    return json_encode[$returnArray];

    }

    }
?>

我已经尝试过使用 GET 的 href 链接,它下载文件但也将 json 作为文本文件下载,这不是我想要的。我也更喜欢用户 POST。

我尝试的第二种方法是使用下载的表单帖子,但我不知道是否有可能使用此方法获得 json 响应。


Javascript

function submitform()
{

var theForm = document.forms['myForm'];

    theForm.setAttribute("method", "post");
    var input = document.createElement('input');
    input.type = 'hidden';
    input.name = "UserName";
    input.value = "someuser";
    theForm.appendChild(input);
    theForm.submit();
}

最后,我尝试使用 ajax,当我取回文件数据时,我不知道是否可以让浏览器将其下载为文件。我读过的内容表明你不能。

4

0 回答 0