Возврат объекта json в codeigniter (flashdata) - PullRequest
3 голосов
/ 20 января 2011

Как в этом случае вернуть объект json (сообщения) в представление (admincp_index).Приведенный ниже метод работает отлично, но мне бы очень хотелось придать ему немного анимации

Ответы [ 3 ]

23 голосов
/ 30 мая 2013

использовать выходной класс воспламенителя кода для ответа json.

$this->output
    ->set_content_type('application/json')
    ->set_output(json_encode(array('foo' => 'bar')));
13 голосов
/ 14 марта 2011

Необходимо помнить о трех вещах:

  1. Браузер может кэшировать ответ JSON, поэтому рекомендуется добавить метку времени в конец URL-адреса, чтобы сохранить актуальность данных. (Это верно для метода GET, но не обязательно для POST).

  2. Тип содержимого ответа JSON должен быть « application / json » или « text / javascript ».

  3. Функция json_encode была включена в PHP 5.2, поэтому старые среды могут не иметь возможности ее использовать, и вам придется либо установить модуль, либо написать собственный класс кодирования.

Я делаю некоторую работу на сервере с PHP 5.1.6, и мне не нужно сериализовывать какие-либо сложные типы, поэтому я нашел способ, показанный ниже, чтобы работать нормально Я использую простое «представление JSON», которое устанавливает правильный тип содержимого в заголовке ответа и выдает строку JSON, которая была вручную объединена в контроллере.

Фил, эффекты / анимации jQuery могут использовать возвращенные данные JSON в функции обратного вызова success . В приведенном ниже примере я просто показываю сообщение в окне предупреждения.

Код на стороне клиента:

// the jQuery POST URL includes a time stamp
var now = new Date();
$.ajax({
    type: "POST",
    url: "page/post/" + now.valueOf().toString(),
    data: {},
    dataType: "json",
    success: function (result) {
        alert(result.message);
    }
});

Контроллер (/application/controllers/page.php):

class Page extends CI_Controller {

    function __construct()
    {
        parent::__construct();
    }

    function index()
    {
    }

    function post($TimeStamp)
    {
        /* process request... $Timestamp may or may not be used here. */

        $data['json'] = '{"message":"The post was handled successfully."}';
        $this->load->view('json_view', $data);
    }
}

Просмотр (/application/views/json_view.php):

<?php
$this->output->set_header('Content-Type: application/json; charset=utf-8');
echo $json;
?>
0 голосов
/ 20 января 2011

Вы делаете неправильный путь. Если вы хотите получить объект json, AJAX - лучший способ справиться с этим. В вашем представлении admincp_index (с jquery)

$.ajax({
        type: 'POST',
        url: 'controller/applicant',
        data: 'your post data',
        success: function(response) {
            var response = $.evalJSON(r);
            if(response.message) {
               //do some animation
            }
        }
    });

заявитель метод

function applicant()
{
  $id = $this->input->post('id');
  if($this->input->post('accept'))
  {
        if($this->admincpModel->accept_applicant($id) == TRUE)
        {
             echo json_encode(array('message'=>'<div class="ok">Applicant Added!</div>'));
             exit();
        }         
   }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...