2013-08-09 2 views
0

Я использую библиотеку kineticjs, и у меня есть сценарий, который сохраняет сцену как изображение с использованием метода toDataURL и загружает его на сервер с помощью XMLHttpReuest. Все работает как ожидается, чтобы получить изображение, сохраненное на сервере, но я не могу заставить страницу перенаправлять или изменять после завершения.Перенаправление после завершения XMLHttpRequest

Мой 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'); 
} 
?> 

Таким образом, изображение сохраняется на сервере, но я получаю следующее ошибка в консоли хром javascript:

Uncaught Error: NetworkError: DOM Exception 19 

Что это значит?

Если я изменить открытый вызов от ложного (синхронно):

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

к истинному (асинхронный):

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

я теперь получить файл, сохраненный на сервере без ошибок, но снова не перенаправлять на example.com

ответ

0

Ваш вызов header() в вашем php-скрипте не перенаправляет вашу страницу с помощью запроса ajax. Вам нужно будет изучить ответ от вашего запроса ajax и выполнить перенаправление в javascript, используя document.location = "http://example.com".

Здесь example о том, как выполнить функцию обратного вызова в ответе ajax.

Кроме того, я не уверен, как и где выполняется этот javascript, но если он находится во внешнем js-файле, ваш <?php echo $newname; ?> не будет выполнен. Вам нужно будет найти более умный способ передачи этой информации в вашу функцию javascript.

+0

безупречный! спасибо :) помог мне нагрузка. php echo является временным, но спасибо за консультацию тоже –

-1

Вы не можете указать строку запроса в POST-запросе. Это должно быть изменено на код ниже

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

Нет причин, по которым запрос POST не может содержать параметры в URI. –