在CodeIgniter中使用AJAX从数据库获取单行记录?

3
我想知道如何在CodeIgniter中使用AJAX从数据库获取数据。您能否检查下面的代码以找出问题的原因?当我点击链接时,我的视图上没有任何反应。

这是我的视图:

<a href="#" class="faq_title"><?php echo $faq_title; ?></a>

这是我的控制器:

public function get_faq_data() {
    $this->load->model("model_faq");
    $title = $_POST['title'];
    $data["results"] = $this->model_faq->did_get_faq_data($title);
    echo json_encode($data["results"]);
}

这是我的模型:

public function did_get_faq_data($title) {
    $this->db->select('*');
    $this->db->from('faq');   
    $this->db->where('faq_title', $title); 

    $query = $this->db->get('faq');

    if ($query->num_rows() > 0) {
        return $query->result();
    } else {
        return false;
    }
}    

这是我的JavaScript文件:
$(".faq_title").click(function() {
    var title = $(this).text();

    $.ajax({
        url: 'faq/get_faq_data',
        data: ({ title: title }),
        dataType: 'json', 
        type: 'post',
        success: function(data) {
            response = jQuery.parseJSON(data);
            console.log(response);
        }             
    });
});

1
如果您想让AJAX调用轻松解析和使用数据,请查看json_encode()。请查看**此链接**以获取更多想法。 - MonkeyZeus
我建议您在控制器中使用JSON视图和返回而不是"echo"。我认为CI会传递一些头信息,这可能会导致JSON出现问题。 - David
1
@David,使用JSON视图绝对是正确的方法,特别是如果您在配置中设置了compression = true,否则您的应用程序将崩溃。我个人从未见过仅仅回显时出现标题问题,特别是如果您告诉AJAX调用期望返回JSON字符串,但话说回来,永远不要说永远=) - MonkeyZeus
请问现在可以检查一下吗? - NiceTry
2个回答

3

试试这个:

$(function(){ // start of doc ready.
   $(".faq_title").click(function(e){
      e.preventDefault();  // stops the jump when an anchor clicked.
      var title = $(this).text(); // anchors do have text not values.

      $.ajax({
        url: 'faq/get_faq_data',
        data: {'title': title}, // change this to send js object
        type: "post",
        success: function(data){
           //document.write(data); just do not use document.write
           console.log(data);
        }
      });
   });
}); // end of doc ready

据我所见,问题在于这个选择器 $(".faq_title") 是一个锚点,锚点具有文本而不是值。因此,我建议你使用 .text() 而不是 .val() 来获取 var title = $(this).val();


谢谢您的回答。我刚刚编辑了我的代码,但是在点击链接时仍然没有任何反应。您能再次检查我的代码吗? - NiceTry
好的,谢谢。现在我应该学习如何传递JS对象而不是变量。 - NiceTry
请问现在可以检查一下吗? - NiceTry

0
我认为,您没有使用锚标签的预期目的,因此最好使用 <p> 标签或其他标签。理想情况下,您应该使用一个 id 整数来标识数据库中的行,而不是使用 title
视图:
<p class="faq_title"><?php echo $faq_title; ?></p>

如果您有一个整数类型的“id”,您可以使用“$_GET”请求并将“id”作为“get_faq_data()”方法的唯一参数接收。
控制器:
public function faqByTitle(): void
{
    if (!$this->input->is_ajax_request()) {
        show_404();
    }
    $title = $this->input->post('title');
    if ($title === null) {
        show_404();
    }
    $this->load->model('model_faq', 'FAQModel');
    echo json_encode($this->FAQModel->getOne($title));
}

常见问题模型:

public function getOne(string $title): ?object
{
    return $this->db->get_where('faq', ['faq_title' => $title])->row(); 
}    

JavaScript:

$(".faq_title").click(function() {
    let title = $(this).text();

    $.ajax({
        url: 'faq/faqByTitle',
        data: {title:title},
        dataType: 'json', 
        type: 'post',
        success: function(response) {
           console.log(response);
        }             
    });
});

这些代码片段都没有经过测试。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接