编辑
在示例中添加了一行来散列密码,这样人们就不会分心。
我有一个服务器端 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,当我取回文件数据时,我不知道是否可以让浏览器将其下载为文件。我读过的内容表明你不能。