还有什么方法可以将表单提交给(MVC)控制器?

时间:2014-07-22 06:09:11

标签: php forms codeigniter

如此简单的HTML提供了一个可以“提交”到指定(MVC)控制器的表单,$ _POST包含表单中的所有数据。

还有哪些方法可以获取所有表单数据并将其发送到控制器?我一直在尝试使用ajax失败,我确信它可以完成,但是还有其他方法吗?

更新 我认为我正在努力解决的一个基本问题是,很多建议似乎都在期待我在服务器方面对我的ajax调用做出反应。我不是。我实际上并不关心服务器端的响应。我正在尝试获取表单数据以向pdf发送死胡同。我不能使用HTML,因为已经设置了表单验证并发布到数据库。

2 个答案:

答案 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相关的。