jQuery $.ajax()
を使用してバイナリデータをPHPに送信しようとしていますが、コードが正常に動作しません。誰かが私を少し助けてくれることを願っています。jQuery ajaxからPHPへのバイナリデータの送信
私の状況:最初は、バイナリデータを処理する必要はありませんでした。私はAJAXコールを持っていて、うまく機能しました。 PHPで
$.ajax({
dataType: 'json'
, type: 'POST'
, data: {foo:bar}
, url: // url to send to ...
...
});
、私は後に続いて$foo = $_POST['foo'];
を使用してデータを取得し、送出データのサイズを大きくする必要がありました。 JSONは大きかったので、私は圧縮lib /メソッドを探す必要がありました。私はpakoを選択してjson文字列をUint8配列に圧縮しました。 (あなたはAJAX経由でJSONを送信する前にデータを圧縮するためのより良い方法があると思われる場合は、お知らせください、ありがとうございました。)
私のコードになった:
var dataStr = JSON.stringify(jsonData);
var pako = window.pako;
var binData = pako.deflate(unescape(encodeURIComponent(dataStr))); // dataStr is now Uint8 array
$.ajax({
....
, data:{binary:binData, foo:bar...} // and other data
, contentType: false
, processData: false
});
私はそれがあるためであるかどうかわかりませんしかし、私はもうPHP側でデータを取得することはできません。 私が試してみましたチェック:
$_POST
$HTTP_RAW_POST_DATA
file_get_contents('php://input')
しかし、私が見る何も関連(私は知りませんであってもよいか、デバッグにvar_dump
/print_r
へ$HTTP_RAW_POST_DATA
とfile_get_contents('php://input')
の内容はわかりません)
ここに何か不足していますか?本当に助けに感謝します。 false`を、あなたがそれをやっている:あなたは、バイナリデータ
var fd = new FormData();
fd.append('binary', new Blob(binData));
fd.append('foo', 'bar');
binary:binData, foo:bar
$.ajax({
....
, data:fd,
, contentType: false
, processData: false
});
を送信する場合は
を経由して、それを読んで、その後(ブロブで)いるFormDataオブジェクトを使用します。 –