У меня есть стандартный 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()
(см. Документацию )