在 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】:在我看来,您并没有将锚标记用于其预期目的,所以也许只使用<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);
);
);
这些 sn-ps 均未经过测试。
【讨论】:
以上是关于在 CodeIgniter 中使用 AJAX 从数据库中获取单行?的主要内容,如果未能解决你的问题,请参考以下文章
Codeigniter- Ajax Codeigniter Ajax - 通过ajax返回不止一行
使用 jquery / ajax 在 CodeIgniter 的控制器中调用函数
在 CodeIgniter 中使用 AJAX 从数据库中获取单行?
如何在codeigniter中使用ajax在mysql数据库中插入数据?