使用Codeigniter POST POST JSON会返回500错误

时间:2011-07-18 18:13:05

标签: javascript jquery ajax json codeigniter

我在使用ajax post函数从控制器返回数据时遇到问题。这里发生的是用户将输入一个样式编号,将该编号提交给控制器。控制器获取提交的值,查询数据库并将结果返回给控制器,然后控制器返回一个数组,然后我将其编码为json。但我一直得到500内部服务器错误???

这是我的控制器

//return schools based on style id
public function search() {
    $input = json_decode($this->input->post('obj'));
    $style_id = $input['style_id'];
    $parent_id = $input['parent_id'];
    $data = array();
    if ($q = $this->page_model->search_results($style_id, $parent_id)) {
        $data = $q;
    }
    echo json_encode($data);
}

这是我的模特

//get all entries
function search_results($style_id, $parent_id) {
    $options = array(
        'Style' => $style_id,
        'Parent_ID' => $parent_id
    );
    $this->db->select('*');
    $this->db->from('pages');
    $this->db->join('entry', 'pages.Page_ID = entry.Parent_Page_ID', 'inner');
    $this->db->where($options);
    $q = $this->db->get();

    if ($q->num_rows() > 0) {
        return $q->result();
    }

}

这是我的javascript

//dress style search
$($searchBtn).click(function(event) {
    var style_id,
         parent_id,
         obj = {};
    //get the value of the input fields
    searchVal = event.currentTarget.previousSibling.value;
    parentID = event.currentTarget.parentElement.childNodes[3].value;
    //The object to be passed to the controller
    obj = { 'style_id' : searchVal, 'parent_id' : parentID };
    //POST the values in json notation, return the search results in json notation
    $.post(base_url + 'index.php/page/search',
            obj,
            function(data) {
                console.log(data);
            },
            'json');
    return false;
});

BASE_URL = HTTP://本地主机:8888 / lexsreg

BTW - 如果我注释掉返回false,我会从我的控制器中回收一个json字符串。

提前致谢!

2 个答案:

答案 0 :(得分:1)

您必须包含csrf令牌。有两种方法可以做到这一点,正如这两篇博客中所解释的那样。

http://aymsystems.com/ajax-csrf-protection-codeigniter-20

http://codeigniter.com/forums/viewthread/176318/

答案 1 :(得分:0)

嗯,第一步是确保你已加载page_model。然后我会确保你在where子句中找到正确的列 - 你需要通过<table-name>.识别它们吗?

然后基本的CI调试从log_message开始:调用log_message('DEBUG', $this->input->post('obj'));,然后调用log_message('DEBUG', json_decode($this->input->post('obj')));