Как получить и отобразить данные после закодированного Json? - PullRequest
0 голосов
/ 04 ноября 2011

Я пытаюсь передать пользовательскую форму ввода jquery / ajax, но я не смог получить никаких данных с сервера при использовании метода json_encode () на стороне PHP. До этого все работало нормально, без использования Json. Я немного запутался, как получить и отобразить результат данных. Должен ли я декодировать его обратно?

Код запроса:

$(document).ready(function() {

    $('#keyword').keyup(function(event) {
        event.preventDefault();

        // Get input form
        var keyword = $('#keyword').val();
        var path = "<?php echo site_url('controller/suggestion'); ?>";

            $.ajax({
                url: path,
                type: "POST",
                data: { search: keyword },
                success: function(data) {
                    console.log('>> Data: ', data);
                }
            });
        }
    }); 

PHP контроллер:

public function suggestion() {
    // Get the keyword from Ajax request
    $keyword = strip_tags($this->input->post('search'));

    if (isset($keyword) && !empty($keyword)) {
        echo '>> Search Keyword: '. $keyword;
        $this->tabResults = json_encode($this->model->findKeyword($keyword, 5));

        //print_r($this->tabResults);
        $data['searchResults'] = $this->tabResults;
        $this->load->view('results', $data);
    }
}

HTML:

<div id="container">
    <div id="header">

        <div class="search">
            <form id="myform" method="post" action="film_controller/test">
                <input type="text" name="keywordsearch" id="keyword">
                <input type="submit" name="search" value="Search">
            </form>
            <div id="suggestionResult"></div>
        </div>

    </div>
</div>

Я пытаюсь добавить dataType: "json" и установить data.searchResults;

Я получил ошибку в консоли Firebug: «Ошибка синтаксиса обновления: 200» JSON.parse: данные неожиданного символа ... »

$.ajax({
                url: path,
                type: "POST",
                data: { search: keyword },
                dataType: "json",
                success: function(data) {
                    console.log('>> Data: ', data.searchResults);
                },
                error:function (xhr, textStatus, thrownError){
                    console.log(">> Update Error Status: ", xhr.status, "Error Thrown: ", thrownError);
                }       
            });

В моем контроллере:

    public static $tabResults = array();

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

    $this->tabResults = self::$tabResults;
}
public function suggestion() {
    // Get the keyword from Ajax request
    $keyword = strip_tags($this->input->post('search'));

    if (isset($keyword) && !empty($keyword)) {
        echo '>> Search Keyword: '. $keyword;
        $this->tabResults = json_encode($this->film_model->findKeyword($keyword, 5));

        print_r($this->tabResults);
        $data['searchResults'] = $this->tabResults;
        $this->load->view('results', $data);
    }
}

Ответы [ 2 ]

1 голос
/ 04 ноября 2011

В функции jquery $_ajax() есть атрибут dataType. Вы должны установить его как JSON.

Если вы установите это так, результат будет в форме объекта. Таким образом, вы должны получить доступ как объект. (Т.е. данные. [Текст, который вы отправили со стороны сервера]).

Указанный ниже URL может помочь вам.

http://api.jquery.com/jQuery.ajax/

Если у Вас все еще есть проблемы, пожалуйста, дайте мне знать ..

0 голосов
/ 04 ноября 2011

Если вы хотите вернуть данные JSON, вам не нужно загружать представление.Просто верните данные в кодировке JSON.

if (isset($keyword) && ! empty($keyword))
{
    $this->tabResults = json_encode($this->model->findKeyword($keyword, 5));

    if ($this->input->is_ajax_request())
    {
        return print $this->tabResults;
    }

    $data['searchResults'] = $this->tabResults;
    $this->load->view('results', $data);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...