2013-03-13 21 views
0

的JavaScript:阿贾克斯发送POST和发送帆布

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”只...

回答

0

只发送一次您的请求,并将两个变量包装在同一个发送中。 发送两次不同的变量是没有意义的...

您还应该检查变量是否存在,serverside,isset($ _ POST ['q'])。

另一种解决方案可能是一个GET变量添加用户如URL:“Pic.php Q =” +用户名和办理的用户名一个GET变量,而不是

0

像apelsinapa说,你要打包在一起:

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

这当然就意味着你无效“应用程序/上传”,因为现在你又回到了形式编码。

因此,再次提到,如果允许查询字符串($_GET)参数表示用户或首选文件名或其他,则可以保持应用程序上载,并且也可以使用文件名。

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