【问题标题】:what other ways are there to submit a form to a (MVC) controller?还有哪些其他方式可以将表单提交给(MVC)控制器?
【发布时间】:2014-09-12 20:13:41
【问题描述】:

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

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

更新: 我认为我正在努力解决的基本问题之一是,很多建议似乎都希望我在服务器端对我的 ajax 调用的响应方面遇到困难。我不是。我实际上并不关心服务器端的响应。我正在尝试获取表单数据以将死胡同发送到 pdf。我不能使用 HTML,因为它已经设置为进行表单验证和发布到数据库。

【问题讨论】:

  • 你要AJAX方式的代码吗?
  • 嗯,那太棒了,但到目前为止我大部分时间都很忙,没有成功,所以我不是那么乐观:(
  • 或者要求simply form post和AJAX以外的其他方式?
  • 问题是我需要发布两次表单数据。我可以通过直接 HTML 到 PDF 创建者脚本或数据库编写脚本执行一次,但不能同时执行。所以我需要另一种方法(比如ajax)
  • 为了避免两次发送相同的数据,也许您可​​以在将信息写入数据库后将信息传递给 pdf 创建器脚本?

标签: php forms codeigniter


【解决方案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 的正常操作以及用于数据库/其他工作的名为属性 ajax-action 的其他 user defined action。
2) 由于我们使用jquery 代替AJAX,因此我们添加了它的库。
3) 我们收到了名为my_form的表单的事件on submit。
4) ev.preventDefault() 防止 default action 的 particular event (这里是提交)。
5) $(this) 将是我们的object 形式,我们将其存储在一个变量中。
6) form.serialize() 将serialize 用于 POST 请求的表单数据。
7) $.post(url, data) 将生成一个 POST 请求到提到的url 和提到的data。
8) .done(function(){})会在请求完成后捕获response。
9) 在控制器端,我们正在获取 POST 数据并执行一些数据库/其他操作。
10) 上述操作完成后,如果一切顺利,我们将返回一个json数据到我们的视图。
11) header('Content-Type: application/json; charset=utf-8')。Content-type 标头仅用作您的应用程序的信息。浏览器不在乎它是什么。浏览器只是返回来自 AJAX 调用的数据。 application/json 会将响应数据解析为 json。


以上代码的用法:

1) 如果您只想提交一个没有响应的简单表单,请使用未注释的代码。
2)如果想要一些响应,请使用未注释的代码。

【讨论】:

  • 谢谢...我会试一试
  • 请使用更新后的代码,就像我之前打错字一样。
  • 好的,取得了一些进展……我想通过 ajax 创建 PDF。但我没有看到第二种形式的行动。我所做的是取消注释您的代码(控制器),并添加一个alert ("success") - 它永远不会出现。另外,我找不到函数“is_post()”。
  • 其实是的。 is_post() 不是input class 中的预定义函数。它通过扩展核心输入类来完成。因此,它编辑了该部分并使其变得简单。响应代码中可能存在一些问题。检查您的浏览器控制台以进行调试。
  • 您是否知道 fPDF 代码旨在终止生成 PDf 文档时的所有脚本。不知道为什么,但这是一个已知的功能或问题。所以也许我还必须尝试重新排序序列 - 首先是数据库/其他工作,然后是 pdf。
【解决方案2】:

在 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

与任何 AJAX 发布到 PHP 一样 - 只需序列化您的表单数据,将其发送到 URL(控制器/方法);反序列化和处理。

如果您为此苦苦挣扎,我建议您需要在 CI 之外构建您苦苦挣扎的部分,因为普通的 PHP 让它工作,然后移植到您的 CI 应用程序中 - 我怀疑您的问题与 CI 无关。

【讨论】:

  • 我的问题是“......与任何其他 PHP - AJAX 请求相同......”我只是没有得到 ajax。
猜你喜欢
  • 1970-01-01
  • 2020-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-16
相关资源
最近更新 更多