我正在使用kineticjs库,我有一个脚本,使用toDataURL
方法将舞台保存为图像,并使用XMLHttpReuest
将其上传到服务器上。在将图像保存到服务器上时,所有工作都按预期工作,但是一旦完成,我就无法使页面重定向或更改。
我生成图片的javascript / kineticjs代码是:
function save() {
stage.toDataURL({
callback: function(dataUrl) {
var ajax = new XMLHttpRequest();
ajax.open("POST",'upload_screenshot.php?newname=<?php echo $newname;?>',false);
ajax.setRequestHeader('Content-Type', 'application/upload');
ajax.send(dataUrl);
}
});
}
我的upload_screenshot.php代码是:
<?php
if (isset($GLOBALS["HTTP_RAW_POST_DATA"])){
$imageData=$GLOBALS['HTTP_RAW_POST_DATA'];
$newname = $_GET['newname'];
$imagefile = 'final_images/'.$newname.'.png';
$filteredData=substr($imageData, strpos($imageData, ",")+1);
$unencodedData=base64_decode($filteredData);
$fp = fopen($imagefile, 'wb');
fwrite($fp, $unencodedData);
fclose($fp);
header('Location: http://www.example.com');
}
?>
因此图像保存在服务器上,但我在chrome javascript控制台中收到以下错误:
Uncaught Error: NetworkError: DOM Exception 19
这是什么意思?
如果我从false(同步)更改公开呼叫:
ajax.open("POST",'upload_screenshot.php?newname=<?php echo $newname;?>',false);
到true(异步):
ajax.open("POST",'upload_screenshot.php?newname=<?php echo $newname;?>',true);
我现在将文件保存到服务器上没有错误,但是再次没有重定向到example.com
答案 0 :(得分:0)
你的php脚本中的header()调用不会通过ajax请求重定向你的页面。您需要检查来自ajax请求的响应,并使用document.location =“http://example.com”在javascript中执行重定向。
这是关于如何对ajax响应执行回调函数的example。
此外,我不确定您执行此javascript的方式或位置,但如果它在外部js文件中,则<?php echo $newname; ?>
将不会执行。您需要找到一种更灵活的方法将此信息传递给您的javascript函数。
答案 1 :(得分:-1)
您无法在POST请求中指定查询字符串,必须将其更改为
下面的代码 ajax.open("POST",'upload_screenshot.php',true);
ajax.setRequestHeader('Content-Type', 'application/upload');
ajax.send("newname='<?php echo $newname;?>'");