Передача данных JSON через JQuery ajax.post для PHP

Im отправляет данные в php-файл через AJAX, используя POST. Он отлично справился с отправкой строк, но теперь я хотел представить свой JS-объект с JSON и декодировать его на стороне PHP.

В консоли я вижу, что мои данные отправлены правильно, но на стороне PHP json_decode возвращает NULL.

Я пробовал следующее:

this.getAbsence = function() { alert(JSON.stringify(this)); jQuery.ajax({ type: "POST", contentType: "application/json; charset=utf-8", url: "ajax/selectSingle.php?m=getAbsence", data: JSON.stringify(this), success : function(data){ alert(data); } }); } 

PHP:

 echo $_POST['data']; echo json_decode($_POST['data']); echo var_dump(json_decode($_POST['data'])); 

А также:

 this.getAbsence = function() { alert(JSON.stringify(this)); jQuery.ajax({ type: "POST", contentType: "application/json; charset=utf-8", url: "ajax/selectSingle.php?m=getAbsence", data: {'Absence' : JSON.stringify(this)}, success : function(data){ alert(data); } }); } 

PHP:

 echo $_POST['Absence']; echo json_decode($_POST['Absence']); echo var_dump(json_decode($_POST['Absence'])); 

Предупреждение было просто проверить, все в порядке …

И обычная строка была правильно отражена 🙂

Если вы ошиблись в своем коде в первом коде, вы должны использовать это:

 var_dump(json_decode(file_get_contents("php://input"))); //and not $_POST['data'] 

Цитата из руководства PHP

php: // input – это поток только для чтения, который позволяет вам считывать необработанные данные из тела запроса.

Поскольку в вашем случае вы отправляете JSON в теле, вы должны прочитать его из этого потока. Обычный метод $_POST['field_name'] работает, потому что тело сообщения не находится в формате URLencoded.

Во второй части вы должны были использовать это:

 contentType: "application/json; charset=utf-8", url: "ajax/selectSingle.php?m=getAbsence", data: JSON.stringify({'Absence' : JSON.stringify(this)}), 

ОБНОВЛЕНИЕ :

Когда запрос имеет application/json типа контента application/json , PHP не проанализирует запрос и не даст вам объект JSON в $_POST , вы должны сами проанализировать его из необработанного тела HTTP. Строка JSON извлекается с помощью file_get_contents("php://input"); ,

Если вы должны получить это с помощью $_POST вы бы это сделали:

 data: {"data":JSON.stringify({'Absence' : JSON.stringify(this)})}, 

А затем в PHP выполните:

 $json = json_decode($_POST['data']); 

Одиночные кавычки недействительны для json_encode php, используйте двойные кавычки для обоих имен полей и значений.

Для меня, похоже, вы должны переформатировать свой объект AJAX. URL-свойство должно быть только URL-адресом целевого php-файла, и любые данные, которые должны быть опубликованы, должны быть в форме строки запроса в свойстве data. Следующее должно работать так, как вы ожидали:

 this.getAbsence = function() { var strJSONData = JSON.stringify(this); alert(strJSONData); jQuery.ajax({ type: 'POST', contentType: 'application/json; charset=utf-8', url: 'ajax/selectSingle.php', data: 'm=getAbsence&Absence=' + strJSONData, success: function(data) { alert(data); } }); } 

попробуй это

  var vThis = this; this.getAbsence = function() { alert(JSON.stringify(vThis)); jQuery.ajax({ type: "POST", contentType: "application/json; charset=utf-8", url: "ajax/selectSingle.php?m=getAbsence", data: JSON.stringify(vThis), success : function(data){ alert(data); } }); } 

РЕДАКТИРОВАТЬ

Думаю, мы тоже можем это сделать!

  var vThis = this; this.getAbsence = function() { alert(JSON.stringify(vThis)); jQuery.ajax({ type: "POST", dataType: "json", url: "ajax/selectSingle.php?m=getAbsence", data: vThis, success : function(data){ alert(data); } }); } 

и в PHP

 print_r($_POST);