如此简单的HTML提供了一个可以“提交”到指定(MVC)控制器的表单,$ _POST包含表单中的所有数据。
还有哪些方法可以获取所有表单数据并将其发送到控制器?我一直在尝试使用ajax失败,我确信它可以完成,但是还有其他方法吗?
更新 我认为我正在努力解决的一个基本问题是,很多建议似乎都在期待我在服务器方面对我的ajax调用做出反应。我不是。我实际上并不关心服务器端的响应。我正在尝试获取表单数据以向pdf发送死胡同。我不能使用HTML,因为已经设置了表单验证并发布到数据库。
答案 0 :(得分:1)
尝试以下代码,
<强>控制器:强>
class Controller_name extends CI_Controller
{
public function __construct()
{
parent::__construct();
}
public function function_name()
{
if($this->input->server('REQUEST_METHOD') == 'POST')
{
$data = $this->input->post();
// below code will print an array consisting your form data
echo "<pre>"; print_r($data);
// now, do whatever database/other action with this data
// below is the response back
// uncomment below code if want response also
// header('Content-Type: application/json; charset=utf-8');
// $json = array();
// if(all went well)
// {
// $json["success"] = true;
// }
// else
// {
// $json["success"] = false;
// }
}
}
}
查看:强>
<form action="/other_controller/other_function/" ajax-action="/controller_name/function_name/" method="POST" name="my_form">
<input name="name" type="text" />
<input name="email" type="text" />
<input type="submit" value="Submit" />
</form>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script>
$(function(){
$("form[name='my_form']").on("submit", function(ev){
ev.preventDefault();
var form = $(this);
var data = form.serialize();
var action = form.attr("ajax-action");
$.post(action, data)
// below is the response back
// uncomment below code if want response also
// .done(function(response){
// if(response.success == true)
// {
// if form posted successfully, do something
// }
// else
// {
// if form failed, do something else
// }
// });
});
});
</script>
的说明:强>
1)在视图中,我们创建了一个包含2个动作的表单。 PDF创建的常规操作和名为属性 user defined action
的其他ajax-action
用于数据库/其他工作。
2)由于我们正在jquery
使用AJAX
,我们已添加了其库。
3)我们选择了名为on submit
的表单的 my_form
事件。
4) ev.preventDefault()
会阻止default action
的{{1}}(此处提交)。
5) particular event
将我们的表格作为$(this)
我们将其存储在变量中。
6) object
将form.serialize()
我们将用于POST请求的表单数据。
7) serialize
会针对上述$.post(url, data)
提到的url
生成POST请求。
8) data
将在请求完成后捕获.done(function(){})
9)在Controller端,我们获取POST数据并执行一些数据库/其他操作
10)完成上述操作后,如果一切顺利,我们会将 response
数据发回给我们的视图。
11) json
。内容类型标头仅用作应用程序的信息。浏览器并不关心它是什么。浏览器只返回AJAX调用中的数据。 header('Content-Type: application/json; charset=utf-8')
会将响应数据解析为 application/json
。
使用上述代码:
1)如果您只想要一个没有回复的简单表单提交,请将未注释的代码保留为原样 2)如果想要一些响应,请使用未注释的代码。
答案 1 :(得分:0)
在CI中使用AJAX与任何其他PHP-AJAX请求完全相同。
由于CI只是一个框架,您可以像在任何其他应用程序中一样使用PHP $_POST[];
。
但是,有一些方便的内置函数
http://ellislab.com/codeigniter/user-guide/libraries/input.html
$this->input->post('post_value');
使用如下: -
private $postedItem;
public function getAJAX(){
$this->postedItem = $this->input->post('post_value');
if($this->postedItem){
//do something with the post - now accessible through $this->postedItem.
}
}
然后将您的数据发布到
controller/getAJAX
与PHP的任何AJAX帖子一样 - 只需序列化表单数据,将其发送到URL(控制器/方法);反序列化和过程。
如果你正在努力解决这个问题,我建议你需要构建你在CI之外苦苦挣扎的部分,因为普通的PHP让它工作然后移植到你的CI应用程序中 - 我怀疑你的问题不是CI相关的。