@mrkovalchuk
Junior developer

Как правильно принять JSON от Ajax?

Доброго времени суток.

Имеется задача: заполнить форму, отправить на валидацию в 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 записывается.

Ищу помощи.
  • Вопрос задан
  • 484 просмотра
Решения вопроса 1
@none7
data= в начале явно лишнее.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@mrkovalchuk Автор вопроса
Junior developer
Проблема в json_decode, ничего не возвращает.

data=["data:image/png;base64,iVBORw0KG...U5ErkJggg==","123","123","123"] - вот что пытаюсь декодить.
Ответ написан
Комментировать
@jekanok
$(document).on("click",".delete_ads", function(){
                    
			var id = $(this).attr("iid");
            var uid = $('#balance').attr('user');
                    
				$.ajax({
                    type: "POST",  
                    data: {"uid": uid, "id": id},
					url: "./lib/delete_ads.php",
					cache: false,
					success: function(data){
    			datas = JSON.parse(data);
			
			 $.each(datas, function(index, data){
				
                
 });
                        if (datas.true == "true"){
                            
						$('[sss="'+id+'"]').remove();
						
  		                }
                if(datas.true == "false"){
				$("#mesegee").text(datas.echo).show().delay(1500).fadeOut(800);
	
		
			}
			    }
                    
				});
			return false;
		});
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы