Подтвердить что ты не робот

Сообщение JSON для контроллера Codeigniter

Я пытаюсь получить и разобрать объект JSON, отправленный в запрос POST с использованием Codeigniter, но я не могу его найти.

Это мой код контроллера:

public function parse () {

  $json = $this->input->post();
  $json = stripslashes($json);
  $json = json_decode($json);

  print_r($json);

}

Это мой объект JSON:

{"data":"value"}
4b9b3361

Ответ 1

Это правильный способ сделать это.

$input_data = json_decode(trim(file_get_contents('php://input')), true);

Ответ 2

$post = json_decode($this->security->xss_clean($this->input->raw_input_stream));

Когда вы используете $this- > input- > raw_input_stream, вы можете прочитать его несколько раз и в основном так же, как file_get_contents ('php://input'). Это работает на CI3. Я не знаю, работает ли он на CI2.

Ответ 3

Попробуйте этот код, он выведет массив со всеми вашими параметрами.

$this->input->raw_input_stream;

$input_data = json_decode($this->input->raw_input_stream, true);

$input_data вернет массив

Ответ 4

Попробуйте это вместо

$json = $this->input->post('data');
$json = stripslashes($json);
$json = json_decode($json);
print_r($json);

Вам нужно передать ключ переменной данных из массива post в качестве аргумента post()

Ответ 5

Ответ Firze правильный, но вот более подробный ответ. Мне не разрешено комментировать, поэтому я отправляю его как ответ.

Это связано с тем, что CodeIgniter не может получить JSON. jQuery делает некоторые под капотом трюки и преобразует ваши данные в form-data-x, поэтому он работает, когда вы не указываете content type, не кодируете свой объект или другие ситуации.

Если вы хотите использовать чистый JSON, решение должно использовать $this->input->raw_input_stream для извлечения вашего JSON и декодирования его с помощью php json_decode. Проверьте полный ответ и код ниже:

Получить данные JSON POST в CodeIgniter

Ответ 6

убедитесь, что у вас есть данные POST, используя $this->input->post() он всегда будет пустым, вы должны ввести имя типа ввода $this->input->post('name_of_input_text')

Ответ 7

Вы уверены, что используете 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);
    }
}

Ответ 8

Я знаю, что это старый пост, но для других, это может быть полезно:

В стороне браузера я создаю свой пакет данных, используя код, похожий на этот шаблон:

    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']);

Ответ 9

Просто добавьте правильный заголовок в заголовок вашего запроса

Content-Type: application/json

Ответ 10

Для того, чтобы использовать стандартные методы CI. В index.php вставьте пару строк:

    $json = json_decode(trim(file_get_contents('php://input')), true);
    if(!empty($json)) {
        $_POST = $json;
    }

Либо внедрить в загрузчик. RIP Codigniter... (

Ответ 11

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

Ответ 12

попробовать

json_decode(array($this->input->post()))

ИЛИ

$tmp[] = (array)json_decode($this->input->post());

print_r($tmp);