編集
例にパスワードをハッシュする行を追加して、人々が気を散らさないようにしました。
検証のために投稿パラメーターをチェックし、パラメーターが有効な場合は動的に生成されたファイルをダウンロードするサーバー側の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];
}
}
?>
ファイルをダウンロードするだけでなく、jsonをテキストファイルとしてダウンロードするGETを使用してa hrefリンクでこれを試しましたが、これは私が望んでいるものではありません。また、POST を使用したいと思います。
私が試した2番目の方法は、ダウンロードするフォーム投稿を使用することでしたが、この方法で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 を使用してみましたが、ファイル データを取得している間、ブラウザにそれをファイルとしてダウンロードさせることができるかどうかわかりません。私が読んだことは、あなたができないことを示唆しています。