我是新來的stackoverflow和CodeIgniter,我目前正在試驗一些簡單的代碼示例,我已經在互聯網上找到了一個開始。我現在正在使用的是一種表單,它使用CI和Ajax(jQuery),並將表單的輸入保存到數據庫中,然後將最近的表單顯示在表單的同一頁面上。 如果我讓你感到困惑,那麼這是來自here的4.7應用示例。最初的源代碼位於here,但我已經修改它以便與CI的最新版本一起工作,並引用了我下面的所有MVC文件。CodeIgniter的Ajax表單 - 提交表格
控制器:
<?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();
}
}
?>
瀏覽
如default.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>
messages_list.php:
<!-- called from ajax call -->
<ol>
<?php foreach ($messages as $cur): ?>
<li><?php echo $cur->message; ?></li>
<?php endforeach; ?>
</ol>
的問題主要在於的意見(如default.php)1號。也就是說,如果我從javascript代碼中省略e.preventDefault();
行,表單會加載一個空白頁面的不同頁面(消息/添加,如表單動作參數所暗示的),同樣也會取消我的應用程序的ajax行爲。另一方面,如果我實際上添加了這一行,那麼我的消息控制器的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()調用中。
任何幫助讚賞和抱歉的大帖子。 :)
在如default.php,爲什麼'$ .post'網址PARAM空? – froddd