XMLHttpRequest完成错误后重定向

Redirect once XMLHttpRequest Complete Error

本文关键字:重定向 错误 XMLHttpRequest      更新时间:2023-09-26

我使用的是kinetijs库,我有一个脚本,它使用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);

至真(异步):

ajax.open("POST",'upload_screenshot.php?newname=<?php echo $newname;?>',true);

我现在将文件保存到服务器上,没有出现错误,但再次没有重定向到example.com

php脚本中的header()调用不会通过ajax请求重定向页面。您需要检查ajax请求的响应,并使用document.location="http://example.com".

下面是一个如何对ajax响应执行回调函数的示例。

此外,我不确定如何或在哪里执行这个javascript,但如果它在外部js文件中,则不会执行<?php echo $newname; ?>。您需要找到一种更聪明的方式将这些信息传递给javascript函数。

您不能在POST请求中指定查询字符串,这必须更改为以下的代码

            ajax.open("POST",'upload_screenshot.php',true);
            ajax.setRequestHeader('Content-Type', 'application/upload');
            ajax.send("newname='<?php echo $newname;?>'");