【发布时间】:2017-11-14 22:39:40
【问题描述】:
我正在尝试使用 jQuery $.ajax() 将二进制数据发送到 PHP,但我的代码并不能正常工作。我希望有人可以帮助我一点。
我的情况:一开始我不需要处理二进制数据,我有一个 AJAX 调用,效果很好。
$.ajax({
dataType: 'json'
, type: 'POST'
, data: {foo:bar}
, url: // url to send to ...
...
});
在 PHP 上,我使用 $foo = $_POST['foo']; 检索数据
后来,需要增加发送数据的大小。 JSON 太大了,我不得不寻找一个压缩库/方法。我选择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_DATAfile_get_contents('php://input')
但我没有看到任何相关(或者我可能只是不知道如何通过var_dump/print_r 来调试$HTTP_RAW_POST_DATA 和file_get_contents('php://input') 的内容?我不知道)。
我在这里遗漏了什么吗?非常感谢您的帮助。
【问题讨论】:
-
这是关键,
processData: false,你正在做。
标签: php jquery json post binary