【发布时间】:2010-09-11 14:53:11
【问题描述】:
我认为这应该很容易,我根本找不到答案。
我正在为一个简单的 CRUD 应用程序使用 Codeigniter。它在表格中显示结果。我所做的是使用 jQuery .ajax 提交表单。它(几乎)完美地工作。
我可以在不重新加载的情况下提交表单,但除非我重新加载页面,否则结果不会显示。现在我使用location.reload();,但它没有意义,毕竟我的意图不是重新加载页面。
我知道我应该回显数据,但不知道如何使用 CI 执行此操作。
一些内幕:
jQuery 部分
$("#add_form").submit(function(e) {
e.preventDefault();
var dataString = $("#add_form").serialize();
$.ajax({
type: "POST",
url: "add",
data: dataString,
success: function() {
$("#lightbox").fadeIn(300).delay(1000).fadeOut(300);
$("#notification-box").show();
$("#notification-box").html('<p>Saving</p>');
$("#addrow").hide();
location.reload();
}
});
});
控制器部分
function add()
{
if(!$this->ion_auth->logged_in())
{
redirect('auth/login', 'refresh');
}else
{
// User ID
$user_data = $this->ion_auth->get_user();
$user = $user_data->id;
// Prepare post data
$data['user'] = $user;
$data['cdate'] = date('Y-m-d');
$data['ctime'] = date('H:i:s');
$data['mdate'] = date('Y-m-d');
$data['mtime'] = date('H:i:s');
$pair_value = $this->input->post('vpair');
if(empty($pair_value))
{
$data['pair'] = "no pair";
}else
{
$data['pair'] = $pair_value;
}
$reason_value = $this->input->post('reason');
if(empty($reason_value))
{
$data['reason'] = "";
}else
{
$data['reason'] = $reason_value;
}
$comment_value = $this->input->post('comment');
if(empty($comment_value))
{
$data['comment'] = "";
}else
{
$data['comment'] = $comment_value;
}
// Insert_data
$this->journal_model->add_trade($data);
}
}
帮助?任何人?
干杯,
/J
【问题讨论】:
-
对于初学者
url: "add",在你的 JS 中不是一个好的开始,你的控制器名称是什么,如果你做 ajax,你不能做重定向,不要那样工作,请把你的完整控制器. -
嗯...它确实有效...因为读取和添加功能在同一个控制器中。我用了很多次,从来没有遇到过问题。
-
我从来没有说过它不起作用,我指的是你构建路径的方式,在你的头模板中你应该有一个包含你的 site_root 的 javascript 变量,然后在你应该使用的 js 文件中
url: site_root + "controller/method/param",这会让你更加稳定。 -
hmmmm...我明白你的意思...嗯...这将是值得实施的。非常感谢罗伯特皮特
-
现在,如果你只是在没有任何 ajax 的情况下运行控制器,你会得到一个空白页面。如果你想显示一些数据,你需要向浏览器输出一些东西。为了让我给你一个更深入的例子,你需要提供更多信息。您的表单所在的页面,它以表格格式显示您的数据?我能想到的最简单的方法是在 add 函数中调用页面的函数。即:如果您的控制器用于显示的功能是“显示”,那么您将调用“$this->display();”在“添加”结束时刷新您的数据而不加载页面。
标签: jquery ajax forms codeigniter