Как отправить JSON на PHP через POST?

С недавнего времени решил переходить на нативный JS и столкнулся с проблемой передачи данных через AJAX. Задача стоит следующая: имеем некий объект который надо передать на сервер.

Код на JS
var someObj = {a:1,b:2};
var xhr = new XMLHttpRequest();
xhr.open('POST', 'node.php', true);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.send(someObj);
xhr.onreadystatechange = function(){
	if (this.readyState == 4) {
		if (this.status == 200)
			console.log(xhr.responseText);
		else
			console.log('ajax error');
	}
};


Аналогичный код на jQuery
var someObj = {a:1,b:2};
$.ajax({
	type: "POST",
	url: "node.php",
	data: someObj,
	success: function(res) {
		console.log(res);
	}
});


Принимаем данные на PHP
print_r($_REQUEST);

В результате имеем не рабочий код на нативном JS и рабочий код на jQuery. В первом случае (JS) всегда возвращает в консоль:
Array
(
)

Во втором (jQuery):
Array
(
    [a] => 1
    [b] => 2
)


Как бы я не пытал свой JS, он ничего возвращать не хочет. Подскажите в чем может быть проблема или хотябы в какую сторону мне смотреть?
  • Вопрос задан
  • 12783 просмотра
Решения вопроса 1
@OVK2015
Как-то так:
js:
var someObj = {a:1,b:2};
var xhr = new XMLHttpRequest();			
xhr.open('POST', 'scratch.php');
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');			
xhr.send('param=' + JSON.stringify(someObj));
xhr.onreadystatechange = function()
{
	if (this.readyState == 4) 
	{
		if (this.status == 200)
		{
			console.log(xhr.responseText);
		}
		else
		{
			console.log('ajax error');
		}
	}
};


php:
$param = json_decode($_REQUEST["param"]);
$result = "Результат: a = ".$param->a."; b = ".$param->b;
die($result);
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
Sanasol
@Sanasol Куратор тега JavaScript
нельзя просто так взять и загуглить ошибку
jquery раскладывает json в обычный post запрос: key=value&ke2=value2
А вы просто объект отправляете в нативном варианте, а туда надо отправлять строку как выше или же JSON сформированную строку(на php через php//input разбирать).
Ответ написан
Rou1997
@Rou1997
Нужен Fiddler, Wireshark и т.п. для анализа (отладки) запросов, сравнили бы, поняли в чем проблема.
Ответ написан
VGrabko
@VGrabko
Golang, Php, Js
var str = "";
for (var key in someObj) {
    if (str != "") {
        str += "&";
    }
    str += key + "=" + encodeURIComponent(someObj[key]);
}
xhr.send(str);
Ответ написан
Подскажите, пожалуйста, если не сложно. Нужно реализовать нечто подобное, но пока просто хочу, чтобы пример заработал
<?php
echo "<script type='text/javascript' src='testjson.js'></script>";

echo "<form action='testjson.php' method='post'>
<input type='text' name='param[]' value=''>
<input type='text' name='param[]' value=''>
<input type='submit' value='Отправить'>
</form>";

print_r($_REQUEST["param"]);
$param = json_decode($_REQUEST["param"]);
$result = "Результат: a = ".$param->a."; b = ".$param->b;
die($result);

print_r($_REQUEST["param"]);
эта штука, если ввести данные в форму выводит массив:
Array ( [a] => 23 [b] => 12 )
А вот результат пустой:Результат: a = ; b =

Подозреваю, что форму я неправильно сделала, можете подсказать в чём ошибка?
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы