javascript - AJAX 发送一个东西而 PHP 接收另一个东西?
问题描述
我正在使用 Fabric.js 画布库,我想将画布保存在服务器上。将其转换为数据 URL:
var canvasData = canvas.toDataURL();
并使用 Ajax 将其发送到服务器:
let xhr = new XMLHttpRequest();
xhr.open("POST", "php/saveImg.php", true);
xhr.onload = () => {
if (xhr.readyState === XMLHttpRequest.DONE) {
if (xhr.status === 200) {
let data = xhr.response;
window.open(data);
}}};
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send("canvasData=" + canvasData);
解码数据并将其保存在saveImg.php
:
if(isset($_POST['canvasData'])){
$imageData = $_POST['canvasData'];
echo $imageData;
$filteredData = substr($imageData, strpos($imageData, ",") + 1);
$a = file_put_contents( "images/image1.png", base64_decode($filteredData));
}
当我查看 时image1.png
,它是透明的,里面什么都没有(但它有正确的尺寸和 40 KB 的大小)。
当我检查接收到的值时$_POST
,我可以看到数据的值发生了变形:一些+
字符已被删除,而其他一些字符已被添加。
解决方案
您的 POST 数据未正确编码,您可以使用它encodeURIComponent
来执行此操作
xhr.send("canvasData=" + encodeURIComponent(canvasData));
推荐阅读
- docker - Docker 多阶段构建的问题
- file - 我们如何检查文件指针是否在delphi中分配?
- c++ - 有没有办法在每个创建的线程上调用一些函数?
- django - 一次只允许一个用户登陆页面
- tensorflow - GAN:如何在 Tensorflow 中更新批量标准化参数
- sql - 如果包裹在事务中,#temp 表上的删除命令在提交之前不会持续存在吗?
- hadoop - 如何在 map reduce 中复制任务?
- java - Spring security , Configuration hasAuthority check on endpoints not working
- python - Python脚本在不同的虚拟机中不起作用
- python - 从 Pydot 图返回 NetworkX 图