JS Ajax вызывает PHP и получает данные ajax call

У меня есть стандартный javascript ajax-вызов, где я устанавливаю данные: для json-данных.

$.ajax({ type: "POST", url: BaseUrl + "User/Login", //url: BaseUrl + "User/Limit/1/2", data: '{"apiKey":"c7089786-7e3a-462c-a620-d85031f0c826","appIDGiven":"200","userName":"matt2","password":"pass"}', success: function(data){ console.log(data); }, error: function(request){ console.log(request); }, }); 

Я пытался получить данные в php $_POST["data"] это не работает.
Однако data: 'test={"apiKey":"c7089786-7e3a-462c-a620-d85031f0c826","appIDGiven":"200","userName":"matt2","password":"pass"}' works ,

Мне было интересно, возможно, это моя инфраструктура или что-то подобное, предотвращающее работу $_POST["data"] или это просто невозможно? Или есть что-то еще, что я мог бы использовать для получения этих данных?

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

Таким образом, структура YII и расширение Restfullyii имеют способ получить данные, которые он использует, используя одну строку return json_decode (file_get_contents («php: // input»), true);

Который получает все данные без необходимости в data = или {data: Однако, похоже, он возвращает массив, поэтому я получаю доступ к моим свойствам, таким как $ data ["userName"], где true json-объект должен быть $ data -> [ Username "]. Исправьте меня, если я ошибаюсь в этом, я получаю массив в этом случае, потому что я действительно отправляю строку json? против объекта json?

EDIT x2:

Поэтому php делает его массивом-ассоциированным, потому что он отправляет true в json_decode ..

Я думаю, что проблема с вашим кодом находится в строке, где вы устанавливаете data: '{....}' .
Он должен быть в формате json для правильной передачи (хотя он также может быть в строчном формате, но вам нужно проанализировать его на стороне сервера)

Код ниже должен работать правильно:

 $.ajax({ type: "post", url: BaseUrl + "User/Login", data: {"apiKey":"c7089786-7e3a-462c-a620-d85031f0c826","appIDGiven":"200","userName":"matt2","password":"pass"}, success: function(data){ console.log(data); }, error: function(request){ console.log(request); } }); 

На стороне сервера попробуйте: $_POST['apiKey'] $_POST['appIDGiven'] и так далее.

data должен быть object или сериализован (например, "name1=value1&name2=value2" ) string.Таким образом, вам нужно пройти так:

 data: /*object*/{data:'{"apiKey":"c7089786-7e3a-462c-a620-d85031f0c826","appIDGiven":"200","userName":"matt2","password":"pass"}'}, // ^-----this is added for $_POST["data"] 

или вроде:

 data: /*serialized string*/'data={"apiKey":"c7089786-7e3a-462c-a620-d85031f0c826","appIDGiven":"200","userName":"matt2","password":"pass"}', // ^-----this is added for $_POST["data"] 

Во-первых, отправленные данные должны быть объектом JSON, а не строкой. Удалите кавычки.

Кроме того, на стороне сервера лучше декодировать входные данные $_POST['data'] с помощью json_decode() (см. Документацию )