【问题标题】:Submit form with jQuery and CodeIgniter without page refresh使用 jQuery 和 CodeIgniter 提交表单,无需刷新页面
【发布时间】:2012-02-08 16:41:34
【问题描述】:

我想在 CodeIgniter 应用程序中使用 jQuery 提交表单。但是,Controller 中调用的函数一直想将用户发送到一个不存在的页面(与 Controller 函数同名)。

我试过这个:

$('#contactForm').submit(function () {

});

还有这个:

$('#contactForm').submit(function () {
    dataString = $("#contactForm").serialize();
    $.ajax({
        type:"POST",
        url:"<?php echo base_url(); ?>about/contactSubmit",
        data:dataString,

        success:function (data) {
            alert('test');
        }

    });

    return false;  //stop the actual form post !important!
});

表单是一个简单的表单,id 为“contactForm”。 jQuery 提交函数的工作原理是它转到控制器中的“contactSubmit”函数。这个函数看起来像这样:

public function contactSubmit()
{

    $this->load->model('customer_model');
    $this->customer_model->addCustomer();
}

所以它调用模型中的 addCustomer 函数,将信息添加到数据库中。一切正常。但随后它试图打开一个不存在的“customerSubmit”页面,这就是我想要避免的。我只是希望它留在同一个页面上,该页面有一个 jQuery 函数,用于告诉用户表单已提交成功。

那么我该怎么做呢?

编辑:

控制器函数contactSubmit不被发送到新页面的关键似乎是在提交jQuery函数中返回false,从我能找到的关于该主题的每个教程来看,但是......当我包含那个时,根本不调用Controller函数。这意味着只有上面的第一个选项真正调用了 Controller 函数(即没有返回 false 的 .submit)。

那么我在这里做错了什么?如果我应该使用提交将数据传递到数据库,但“返回 false”会阻止它实际调用控制器中的函数?

编辑 2: 找到了答案,请参阅我对 Christophs 帖子的评论!

【问题讨论】:

  • 谁试图打开客户提交页面?
  • 好吧,没有人尝试这样做,但事实是我需要调用一个函数来将数据添加到数据库中,当我这样做时,该函数会将用户传递到假定的页面对应控制器函数名称。这就是我不想要的......
  • @AndersSvensson 我不熟悉 PHP 但你看过这个答案here吗?

标签: jquery form-submit codeigniter-2


【解决方案1】:

只是猜测:尝试event.preventDefault() 停止在&lt;form action="..."&gt; 中定义的提交操作的默认行为(通常发送表单数据并转发到某种“收到请求”页面)。

代码是这样的:

$('#contactForm').submit(function (event) {
    dataString = $("#contactForm").serialize();
    $.ajax({
        type:"POST",
        url:"<?php echo base_url(); ?>about/contactSubmit",
        data:dataString,

        success:function (data) {
            alert('test');
        }

    });
    event.preventDefault();
});

【讨论】:

  • 不幸的是,这与 return false 具有相同的效果-即根本不调用 Controller 中的函数,这不好,因为我需要使用该函数来执行实际的数据库更新。我只是不想离开页面......我相信你是对的,这就是 ajax 应该如何工作的。您使用 event.preventDefault 来停止正常提交并仅发布数据。但是随后没有调用该函数,这就是我无法弄清楚的...
  • 您确定没有调用控制器吗? ajax 数据的返回值是多少?你能发布数据吗?添加错误函数和console.log(data),看看会发生什么。
  • 好的,谢谢,最后的提示实际上让我找到了答案。当检查这个时,我得到的信息让我意识到它没有被调用,因为 url 是错误的。我在外部 js 文件中有 ,但这不起作用。所以我在一个php文件中创建了一个js变量,以便能够对base_url使用php函数,然后我在ajax函数中使用了这个js变量。然后它起作用了!谢谢,我会奖励你引导我找到答案的赏金。
【解决方案2】:

可能您在页面尚未加载时分配submit处理程序,因此js看不到任何表单对象,尝试在页面加载事件处理程序中分配它,如下所示:

$(function() {
    $('#contactForm').submit(function () {
        ....
    });
});

【讨论】:

  • 不,这不是问题,我只是把那部分放在了外面,以显示重要的部分。正如我所提到的,只要提交调用表单的 action 属性中的 contactSubmit 函数,jQuery 函数就会起作用。问题只是 CodeIgniter 然后想提供一个与这个 Controller 函数同名的页面,我不想更改页面,我只想调用一个函数将数据传递给数据库......
猜你喜欢
  • 2013-08-28
  • 2012-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
  • 2011-12-10
  • 1970-01-01
相关资源
最近更新 更多