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

Posted

技术标签:

【中文标题】在 CodeIgniter 中使用 AJAX 从数据库中获取单行?【英文标题】:Get a single row from the database using AJAX in CodeIgniter? 【发布时间】:2014-07-17 15:59:02 【问题描述】:

我想知道如何在 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);
                     
    );
);

【问题讨论】:

如果您希望 AJAX 调用轻松解析和使用数据,请查看 json_encode()。查看 this 了解更多想法 我还建议在控制器中使用 json 视图并返回而不是“回显”。我认为 CI 传递了一些可能导致 json 出现问题的标头。 @David JSON 视图绝对是执行此操作的正确方法,特别是如果您在配置中设置compression = true,否则您的应用程序将被炸毁。我个人在简单地回显它时从未见过标题问题,特别是如果您告诉 AJAX 调用期望 JSON 返回字符串,但再一次,永远不要说永远 =) 您现在可以检查一下吗? 【参考方案1】:

试试这个:

$(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

我看到的问题是var title = $(this).val();,因为您的选择器$(".faq_title") 是一个锚点,而锚点的文本不是值。所以我建议你使用.text() 而不是.val()

【讨论】:

感谢您的回答。我刚刚编辑了我的代码,但单击链接时仍然没有任何反应。你能再检查一下我的代码吗? 好的,谢谢,现在我应该学习如何传递js对象而不是变量 您现在可以检查一下吗?【参考方案2】:

在我看来,您并没有将锚标记用于其预期目的,所以也许只使用&lt;p&gt; 标记或其他东西。理想情况下,您应该使用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);
                     
    );
);

这些 sn-ps 均未经过测试。

【讨论】:

以上是关于在 CodeIgniter 中使用 AJAX 从数据库中获取单行?的主要内容,如果未能解决你的问题,请参考以下文章

Codeigniter- Ajax Codeigniter Ajax - 通过ajax返回不止一行

使用 jquery / ajax 在 CodeIgniter 的控制器中调用函数

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

如何在codeigniter中使用ajax在mysql数据库中插入数据?

在 CodeIgniter 中使用 ajax 出现 403 禁止错误

使用 codeigniter 和 jquery 进行 AJAX 分页