Доброго времени суток.
Имеется задача: заполнить форму, отправить на валидацию в JS, где Ajax-ом отправить данные в php JSON-ом.
Передать строку без json-а получается спокойно. Дальше трудности.
Форма
<form>
Image Title: <input size='20' name="title" rype='text' value="">
You Comment: <input size='50' name='comment' type='text' value=''>
You name: <input size='15' name="author" rype='text' value="">
<button onclick="return saveCanvas(this.form)">Сохранить содержимое Canvas</button>
<button onclick="return clearCanvas()">Очистить Canvas</button>
</form>
Валидатор-отправлятор.js
function saveCanvas(data) {
if (data.author.value==''){
alert('Введите имя');
return false;
}
if (data.comment.value==''){
alert('Введите комментарий');
return false;
}
if (data.title.value==''){
alert('Введите название');
return false;
}
// Находим элемент <img>
var imageCopy = document.getElementById("savedImageCopy");
// Отображаем данные холста в элементе <img>
imageCopy.src = canvas.toDataURL();
// Показываем элемент <div>, делая изображение видимым
// делая изображение видимым
var imageContainer = document.getElementById("savedCopyContainer");
imageContainer.style.display = "block";
var ajax = new XMLHttpRequest();
$massiv = [imageCopy.src, data.author.value, data.comment.value, data.title.value]
var jsonString = 'data='+JSON.stringify($massiv);
ajax.open("POST",'helpers/saveImage.php',false);
ajax.setRequestHeader('Content-Type', 'application/upload');
ajax.send(jsonString);
return false;
}
Приниматель.php
<?php
if (isset($GLOBALS["HTTP_RAW_POST_DATA"]))
{
// Get the data
$imageData=$GLOBALS['HTTP_RAW_POST_DATA'];
$filteredData = json_decode($imageData);
// Remove the headers (data:,) part.
// A real application should use them according to needs such as to check image type
$filteredImageData = substr($filteredData[0][0], strpos($filteredData[0][0], ",")+1);
// Need to decode before saving since the data we received is already base64 encoded
$unencodedData=base64_decode($filteredImageData);
//echo "unencodedData".$unencodedData;
// Save file. This example uses a hard coded filename for testing,
// but a real application can specify filename in POST variable
$fp = fopen( 'test.png', 'wb' );
fwrite( $fp, $unencodedData);
fclose( $fp );
}
?>
Все пути верные и обсуждению не подлежат. JSON уходит, debug-хрома говорит,что, мол статус 200, огонь всё. Но как прочитать этот JSON не особо понимаю.
Проблема в json_decode, ничего не возвращает.
data=["data:image/png;base64,iVBORw0KG...U5ErkJggg==","123","123","123"] - вот что в $imageData записывается.
Ищу помощи.