重定向一次XMLHttpRequest完成错误

时间:2013-08-09 12:33:49

标签: php javascript xmlhttprequest domexception

我正在使用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

2 个答案:

答案 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;?>'");