отправить json-объект из javascript в php

Я пытаюсь отправить объект JSON из Javascript / Jquery в PHP, и я получаю сообщение и сообщение об ошибке в моей консоли. Что я делаю не так. Я новичок в JS и PHP.

Файл JQuery:

$(document).ready(function() { var flickr = {'action': 'Flickr', 'get':'getPublicPhotos'}; // console.log(typeof(flickr)); var makeFlickrCall = function(flickrObj){ $.ajax({ url: '../phpincl/apiConnect.php', type: 'POST', data: flickrObj }) .done(function(data) { console.log("success"); console.log(JSON.stringify(data)); }) .fail(function() { console.log("error"); }) .always(function() { console.log("complete"); }); }; makeFlickrCall(flickr); }); 

Файл PHP

 <?php $obj = $_POST['data']; // print_r($obj); return $obj; ?> 

Отличный ответ Фила, однако, поскольку название OP говорит

отправить json-объект из javascript ( не jQuery ) в php

это как сделать это с (ванильным) javascript, в случае, если это поможет кому-то искать этот метод:

 var jsondata; var flickr = {'action': 'Flickr', 'get':'getPublicPhotos'}; var data = JSON.stringify(flickr); var xhr = new XMLHttpRequest(); xhr.open("POST", "../phpincl/apiConnect.php", !0); xhr.setRequestHeader("Content-Type", "application/json;charset=UTF-8"); xhr.send(data); xhr.onreadystatechange = function () { if (xhr.readyState === 4 && xhr.status === 200) { // in case we reply back from server jsondata = JSON.parse(xhr.responseText); console.log(jsondata); } } 

Обратите внимание, что нам все равно нужно преобразовать ответ сервера в объект javascript, используя JSON.parse()

Теперь, на стороне сервера (на основе ответа Фила), если вы отправляете ответ клиенту, вы можете сделать следующее:

 header('Content-type: application/json'); $json = file_get_contents('php://input'); $json_decode = json_decode($json, true); $json_encode = json_encode($json_decode); echo $json_encode; 

ПРИМЕЧАНИЕ .

Причина декодирования сначала, а затем кодирование назад входного сигнала json заключается в том, чтобы должным образом избежать косой черты (возможно) URL-адресов внутри данных, например

json_encode преобразует этот URL-адрес

 http://example.com 

в

 http:\/\/example.com 

… это не так в ОП, но полезно в некоторых других сценариях.

Стандартный метод jQuery .ajax() использует свойство data для создания строки x-www-form-urlencoded для передачи в тело запроса. Что-то вроде этого

 action=Flickr&get=getPublicPhotos 

Поэтому ваш PHP-скрипт не должен искать $_POST['data'] а вместо этого $_POST['action'] и $_POST['get'] .

Если вы хотите отправить сырую информацию JSON-данных в PHP, сделайте следующее …

Задайте параметр AJAX contentType для application/json и отправьте стробированную версию вашего объекта JSON в качестве полезной нагрузки data , например

 $.ajax({ url: '../phpincl/apiConnect.php', type: 'POST', contentType: 'application/json', data: JSON.stringify(flickrObj), dataType: 'json' }) 

Затем ваш PHP-скрипт будет считывать полезную нагрузку данных из потока php://input , например

 $json = file_get_contents('php://input'); 

Затем вы можете проанализировать это в PHP-объекте или массиве …

 $dataObject = json_decode($json); $dataArray = json_decode($json, true); 

И, если вы просто хотите отозвать его обратно клиенту.

 header('Content-type: application/json'); // unmodified echo $json; // or if you've made changes to say $dataArray echo json_encode($dataArray); 

Использование:

 makeFlickrCall( { data: JSON.stringify( flickr )} ); 

Вместо

 makeFlickrCall(flickr); 

Ваш скрипт на стороне сервера должен получить ваш JSON следующим образом:

 data="{"action":"Flickr","get":"getPublicPhotos"}"