Ответ 1
Это правильный способ сделать это.
$input_data = json_decode(trim(file_get_contents('php://input')), true);
Я пытаюсь получить и разобрать объект JSON, отправленный в запрос POST с использованием Codeigniter, но я не могу его найти.
Это мой код контроллера:
public function parse () {
$json = $this->input->post();
$json = stripslashes($json);
$json = json_decode($json);
print_r($json);
}
Это мой объект JSON:
{"data":"value"}
Это правильный способ сделать это.
$input_data = json_decode(trim(file_get_contents('php://input')), true);
$post = json_decode($this->security->xss_clean($this->input->raw_input_stream));
Когда вы используете $this- > input- > raw_input_stream, вы можете прочитать его несколько раз и в основном так же, как file_get_contents ('php://input'). Это работает на CI3. Я не знаю, работает ли он на CI2.
Попробуйте этот код, он выведет массив со всеми вашими параметрами.
$this->input->raw_input_stream;
$input_data = json_decode($this->input->raw_input_stream, true);
$input_data
вернет массив
Попробуйте это вместо
$json = $this->input->post('data');
$json = stripslashes($json);
$json = json_decode($json);
print_r($json);
Вам нужно передать ключ переменной данных из массива post в качестве аргумента post()
Ответ Firze правильный, но вот более подробный ответ. Мне не разрешено комментировать, поэтому я отправляю его как ответ.
Это связано с тем, что CodeIgniter не может получить JSON
. jQuery
делает некоторые под капотом трюки и преобразует ваши данные в form-data-x
, поэтому он работает, когда вы не указываете content type
, не кодируете свой объект или другие ситуации.
Если вы хотите использовать чистый JSON
, решение должно использовать $this->input->raw_input_stream
для извлечения вашего JSON
и декодирования его с помощью php
json_decode
. Проверьте полный ответ и код ниже:
убедитесь, что у вас есть данные POST, используя $this->input->post()
он всегда будет пустым, вы должны ввести имя типа ввода $this->input->post('name_of_input_text')
Вы уверены, что используете POSTING данные, а не вместо GET? Я столкнулся с этим вопросом ранее сегодня (вот как я нашел этот вопрос), и я делал POST, но использовал JSONP, который, как представляется, выполняется с помощью GET.
CodeIgniter имеет функцию get_post, которая будет получать данные из любой точки, где бы она ни находилась.
$this->input->get_post_string('data');
Надеюсь, это поможет вам.
Вы можете сделать это вручную, если хотите.
function get_post($index = '', $xss_clean = FALSE){
if ( ! isset($_POST[$index]) )
{
return $this->get($index, $xss_clean);
}
else
{
return $this->post($index, $xss_clean);
}
}
Я знаю, что это старый пост, но для других, это может быть полезно:
В стороне браузера я создаю свой пакет данных, используя код, похожий на этот шаблон:
var form_data = { };
$.each($('#mvt_dialog_form').serializeArray(), function() {
form_data[this.name] = this.value;
});
// add the address data to the payload
var result = {
form_data: form_data,
locations: addressData,
selected_location: selectedLocation
};
// now wrap it all up with a pretty bow
// Seriously, the key:value format is required for codeigniter INPUT class to be able to "see"
var movement = {
movement_dlg: JSON.stringify(result)
};
Затем я отправляю сообщение на сервер. В контроллере я затем использую следующую логику:
// Perform XSS filtering
$postData = $this->input->post(NULL, TRUE);
$result = json_decode($postData['movement_dlg']);
Просто добавьте правильный заголовок в заголовок вашего запроса
Content-Type: application/json
Для того, чтобы использовать стандартные методы CI. В index.php вставьте пару строк:
$json = json_decode(trim(file_get_contents('php://input')), true);
if(!empty($json)) {
$_POST = $json;
}
Либо внедрить в загрузчик. RIP Codigniter... (
controller:
puplic function exam(){
$obj = file_get_contents('php://input');
$edata = json_decode($obj);
echo $edata->name;
}
Go to post man->type->post
formate:json
{
"name":"atm fahim"
}
==>send
попробовать
json_decode(array($this->input->post()))
ИЛИ
$tmp[] = (array)json_decode($this->input->post());
print_r($tmp);