【问题标题】:Passing Form data to Controller将表单数据传递给控制器
【发布时间】:2013-04-21 00:06:57
【问题描述】:

所以在我的 Javascript 中,我使用表单序列化输出是正确的

(issubmit=1&username=tester&password=test&cpassword=test&firstname=sdfds&lastname=fsdfdsf&gender=&email=pie%40aol.com&phone=&address=&phone=&address=)

当我尝试将它传递给我的控制器时,我什么也得不到,result = ""。我做错了什么?

jQuery:

var dataString = $("form").serialize();
    $.ajax({
        url: '<?php echo base_url();?>index.php/welcome/submit_form/',
        async: false,
        type: 'POST',
        data: dataString,
        dataType: 'html',
        success: function(data) {
        $('#ajax-content-container').html(data);
    }
});

控制器:

function submit_form() {
    $data = $this->input->post('dataString');
    echo "<p>result= ".$data."</p>";
}

【问题讨论】:

  • 我假设它是 class welcome extends CI_Controller {} 并且 submit_form() 是该类的子类,并且您要在构造函数中扩展父类?
  • 这是正确的哦,为什么
  • 要获取序列化数据,您可以使用 $formData = $this->input->post();所以不需要从 HTML 页面中获取数组形式的数据。

标签: php javascript jquery ajax codeigniter


【解决方案1】:

您的控制器似乎正在检查名为“dataString”的后置参数。但是这个参数似乎没有在您的 ajax 请求中发送。当您序列化您的表单时,它会将所有表单字段组合成一个 url 编码的字符串。这里没有对“dataString”参数的引用。

您可能想要在表单中做的是像这样包装每个输入字段的名称属性:

<input type="text" name="dataString[username]" value="" />
<input type="text" name="dataString[password]" value="" />

完成此操作后,我相信您应该能够检查控制器中名为“dataString”的参数。它应该是一个包含键/值格式的所有字段的数组。例如

function submit_form() {
    $data = $this->input->post('dataString');
    echo var_dump($data);
}

【讨论】:

  • 你是绝对正确的。如果您有时间,我还有一个问题,在将其插入数据库之前,我应该在控制器或模型中格式化该数组(删除特殊字符等)吗?
  • 你真的应该把这个作为 Stackoverflow 上的一个新问题来问,因为这可能是一个复杂的问题,而这正是 Stackoverflow 的用途。这是您在编写代码之前必须了解的一个关键主题。我不会把它放在模型中,因为验证表单的输入是一个在项目中所有实体中通用的过程,而不仅仅是对你的用户。您应该创建一个用于验证表单数据的流程,该流程可以应用于您项目中的任何表单。
猜你喜欢
  • 1970-01-01
  • 2021-06-23
  • 2019-01-06
  • 1970-01-01
  • 1970-01-01
  • 2015-12-24
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多