Ajax发送Post,并发送Canvas

时间:2013-03-13 20:41:15

标签: php javascript jquery ajax

JavaScript的:

var username = 'sami';
var myImage = canvas.toDataURL("image/png");
var ajax = new XMLHttpRequest();
ajax.open("POST", "Pic.php", false);
ajax.setRequestHeader('Content-Type', 'application/upload');
ajax.send(myImage);
ajax.send("q=" + encodeURIComponent(username));

PHP:

<? php
if (isset($GLOBALS["HTTP_RAW_POST_DATA"])) {
    $user = $_POST['q'];
    $comp = $user.".png";
    $imageData = $GLOBALS['HTTP_RAW_POST_DATA'];
    $filteredData = substr($imageData, strpos($imageData, ",") + 1);
    $unencodedData = base64_decode($filteredData);
    $fp = fopen($comp, 'wb');
    fwrite($fp, $unencodedData);
    fclose($fp);
} ?>

这是代码,问题是当图像仅保存“.png”时,我无法通过帖子获取用户....

2 个答案:

答案 0 :(得分:0)

仅发送一次请求并将两个变量打包在同一个发送中。 用不同的变量发送两次是没有意义的......

您还应检查变量是否存在,服务器端,是否设置($ _ POST ['q'])。

另一个解决方案可能是将用户作为GET变量添加到网址中:“Pic.php?q =”+ username并为用户名处理GET变量

答案 1 :(得分:0)

就像apelsinapa说的那样,你必须将它们打包在一起:

ajax.send("img=" + myImage + "&user=" + user);

这当然意味着您使“应用程序/上传”无效,因为现在您又回到了表单编码。

同样,如上所述,如果您允许表示用户或首选文件名的查询字符串($_GET)参数,或者其他任何内容,您可以保持应用程序上传,并且还具有文件名。< / p>

ajax.open("POST", "Pic.php?user=" + user + "&fname=" + filename, true);
// leave headers as you have set them
// event-handlers here
ajax.send(myImage);