gpt4 book ai didi

ajax - CodeIgniter Ajax 表单 - 提交表单

转载 作者:行者123 更新时间:2023-12-04 05:33:00 25 4
gpt4 key购买 nike

我是 stackoverflow 和 CodeIgniter 的新手,我目前正在尝试一些我在 Internet 上找到的简单代码示例,以便开始。我现在正在处理的一个表单使用 CI 和 Ajax (jQuery),并将表单的输入保存在数据库中,然后在与表单相同的页面上显示它们中的最新输入。
如果我把你弄糊涂了,那是来自 here 的 4.7 应用程序示例.初始源代码位于 here但是我已经修改了它以使用最新版本的 CI,并在下面引用了我所有的 MVC 文件。

Controller :

<?php
class Message extends CI_Controller
{
function __construct()
{
parent::__construct();
$this->load->helper('form');
$this->load->helper('url');
$this->load->helper('security');
$this->load->model('Message_model');
}

function view()
{
//get data from database
$data['messages'] = $this->Message_model->get();

if ( $this->input->is_ajax_request() ) // load inline view for call from ajax
$this->load->view('messages_list', $data);
else // load the default view
$this->load->view('default', $data);
}

//when we pres the submit button from the form
function add()
{
if ($_POST && $_POST['message'] != NULL)
{
$message['message'] = $this->security->xss_clean($_POST['message']);
$this->Message_model->add($message);
}
else
{
redirect('message/view');
}
}
}
?>

型号:
<?php
class Message_model extends CI_Model
{
function __construct()
{
parent::__construct();
$this->load->database();
}

function add($data)
{
$this->db->insert('messages', $data);
}

function get($limit=5, $offset=0)
{
$this->db->order_by('id', 'DESC');
$this->db->limit($limit, $offset);

return $this->db->get('messages')->result();
}
}
?>

浏览量

默认.php:
<!-- called using message/view -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<script src="<?php echo base_url('js/jquery-1.8.1.min.js'); ?>" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function()
{
$('#submit').click(function(e)
{
e.preventDefault();
var msg = $('#message').val();
$.post("", {message: msg}, function() {
$('#content').load("");
$('#message').val('');
});
});
});
</script>
</head>

<body>
<?php echo form_open("message/add"); ?>
<input type="text" name="message" id="message">
<input type="submit" value="submit" name="submit" id="submit">
<?php echo form_close(); ?>

<div id="content"></div>
</body>
</html>

消息列表.php:
<!-- called from ajax call -->

<ol>
<?php foreach ($messages as $cur): ?>
<li><?php echo $cur->message; ?></li>
<?php endforeach; ?>
</ol>

问题主要在于第一个 View (default.php)。也就是说,如果我省略 e.preventDefault(); javascript 代码中的一行,然后表单加载一个不同的页面(消息/添加如表单操作参数所暗示的),这是一个空白页面,也以这种方式取消了我的应用程序的 ajax 行为。
另一方面,如果我真的添加了这一行,则不会调用我的消息 Controller 的 add 方法,因此不会将我输入的内容添加到数据库中。

最后,我尝试了以下 js 代码,而不是上面的其他代码:
$(document).ready(function()
{
$('#submit').click(function(e)
{
e.preventDefault();
var msg = $('#message').val();
$.post("<?php echo base_url(); ?>message/add", {message: msg}, function() {
$('#content').load("");
$('#message').val('');
});
});
});

但这样看来 $.post() 崩溃了,因为在应该在成功的 post() 调用上运行的函数中没有执行任何操作。

任何帮助都对这篇大文章表示赞赏和抱歉。 :)

最佳答案

您是正确的,您必须调用 e.PreventDefault(); ,但您还必须处理来自回调函数的响应,而您不是。回调接受一些参数,但第一个是您感兴趣的,它是来自您的服务器的响应。我将其表示为 r以下:

$(document).ready(function(){
$('#submit').click(function(e){
e.preventDefault();
var msg = $('#message').val();
$.post("<?php echo base_url(); ?>message/add", {message: msg}, function(r) {
//do something with r... log it for example.
console.log(r);
});
});
});

我还删除了 $.("#content").load(...); .当第一个请求完成时,这实际上会执行另一个 AJAX 请求。

现在,检查您的 Controller ...请不要使用 $_POST。 CodeIgniter 为您提供 $this->input->post()作为 Input Library 的一部分.如果在 config/config.php 中打开全局 XSS 过滤你也不必 xss 清理它。您可以使用 $this->input->post('name', true); 逐个进行清理。

我推荐这个:
function add(){
$m = $this->input->post('message', true);
if($m){
$this->Message_model->add($m);
}
}

关于ajax - CodeIgniter Ajax 表单 - 提交表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12352404/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com