Отправить JSON на контроллер Codeigniter - PullRequest
12 голосов
/ 22 декабря 2011

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

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

public function parse () {

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

  print_r($json);

}

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

{"data":"value"}

Ответы [ 12 ]

24 голосов
/ 13 марта 2013

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

$input_data = json_decode(trim(file_get_contents('php://input')), true);
7 голосов
/ 01 июня 2016
$post = json_decode($this->security->xss_clean($this->input->raw_input_stream));

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

4 голосов
/ 10 октября 2017

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

$this->input->raw_input_stream;

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

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

2 голосов
/ 22 декабря 2011

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

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

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

1 голос
/ 29 июля 2016

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

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

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

Извлечение данных JSON POST в CodeIgniter

0 голосов
/ 18 декабря 2018
controller:
puplic function exam(){
$obj = file_get_contents('php://input');
$edata = json_decode($obj);
echo $edata->name;
}
Go to post man->type->post
url:http://www.exam.com/exam
formate:json
{
"name":"atm fahim"
}
==>send
0 голосов
/ 29 мая 2018

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

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

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

0 голосов
/ 03 мая 2016

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

Content-Type: application/json
0 голосов
/ 13 декабря 2013

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

На стороне браузера я создаю свой пакет данных, используя код, подобный следующему:

    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']);
0 голосов
/ 21 сентября 2012

Вы уверены, что размещаете данные и не выполняете 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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...