Возвращение данных после запроса - Codeigniter

0

Я не уверен, почему это не работает

js - он предупреждает о ширине, отправляет ее контроллеру, но он не будет предупреждать "сделано".

Сеть → Просмотр (проверка элемента Chrome) content: "<ul><li>50</li></ul>" status: "ok"

$("#submit").click(function (e) {
e.preventDefault();
    var width = $('#value').val();
    $.ajax({
        url: "http://domain.com/index.php/welcome/get_items",
        data: {
            width: width
        }
    }).done(function(data) {
        $('div#cont').text(data);
    }).fail(function() {
        alert('Failed!')
    });

});

контроллер

public function get_items()
{
        $this->load->model('home_model');

            $this->load->library('form_validation');
            $this->form_validation->set_rules('width', 'Width', 'trim|required|xss_clean');
            $width = $_GET['width'];

var_dump($width);
        $one_exp = $this->home_model->one_exp($width);
var_dump($one_exp);
        if($one_exp != false){
                //$html = '<ul>';
                foreach($one_exp as $exp) {
                        $html = $exp->width;
                }
                //$html .= '</ul>';
                $result = array('status' => 'ok', 'content' => $html);
                //header('Content-type: application/json');
                echo json_encode($result);
                exit();
        }else{
                $result = array('status' => 'no', 'content' => 'nothing here');
                //header('Content-type: application/json');
                echo json_encode($result);
                exit();
        }

}

home_model

function one_exp($width) {
       $query_str = "SELECT * FROM files WHERE width=?";
       $query = $this->db->query($query_str, array($width));

    if($query->num_rows() > 0) {
        foreach($query->result() as $item) {
            $data[] = $item;
        }
            return $data;
    } else {
            return false;
    }
}
Теги:
codeigniter

2 ответа

1
Лучший ответ

Какую версию jQuery вы используете? Если вы используете более позднюю версию, ваш синтаксис может просто не работать. Вы также можете столкнуться с отказом Access-Control-Allow-Origin.

Тем не менее, попробуйте использовать jQuery 1.9.X или выше и используйте более подробный метод $.ajax:

$(document).ready(function () {
    $("#click").click(function () {
        var width = $('#width').val();
        alert(width);
        $.ajax({
            url: "http://mywebsite.com/index.php/welcome/get_items",
            data: {
                width: width
            }
        }).done(function (data) {
            alert(data);
        }).fail(function() {
            alert('Failed!')
        });

    });
});

См. Здесь в действии, а также ошибка перекрестного происхождения отображается в журнале консоли: http://jsfiddle.net/remus/LcTe4/

Не забудьте удалить echo указанное в ответе Ашока, и лучше всего добавить тип содержимого json:

header('Content-type: application/json');
echo json_encode($result);
  • 0
    <script src="http://code.jquery.com/jquery-latest.min.js"></script> использую последнюю версию jquery
  • 0
    ОК - попробуйте использовать метод $ .ajax и посмотрите, сможете ли вы заставить его работать.
Показать ещё 11 комментариев
2

в контоллере удалите эхо

 public function get_items()
    {
    $this->load->model('home_model');

    $width = $this->input->post('width');

    $one_exp = $this->home_model->one_exp();

    if ($one_exp != NULL)
    {
           $html = '<ul>'; //remove echo
            foreach($one_exp as $exp)
            {
                    $html .= '<li>';
                    $html .= $exp->width;
                    $html .= '</li>';
            }
            $html .= '</ul>';
            $result = array('status' => 'ok', 'content' => $html);
            echo json_encode($result);
            exit();
    }
    else
    {
            $result = array('status' => 'no', 'content' => 'nothing here');
            echo json_encode($result);
            exit();
    }

}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню