如何通过AJAX调用将表单数据传递给PHP(CodeIgniter Framework)

时间:2013-12-19 07:59:21

标签: javascript ajax codeigniter jquery

我有以下HTML结构:

<form method="POST">
    Name : <input id="asgname" type="text"> <br>
    Description : <input id="asgdescription" type="text"> <br>
    <a href="#" id="asgsave" class="assignment-action">Save</a>
</form>

我希望在单击“保存”按钮时,表单值通过AJAX调用发送到服务器。 为此,我通过以下命令附加了click事件

$("#asgsave").click(save_assignment);

save_assignment也是一个javascript函数,定义如下:

function save_assignment() {
     return $.ajax({
           type: "POST",
           url:  "<?php echo base_url();?>index.php/user/save_assignment",
           data: $('form').serialize(),
                success: function(response) {
                    alert('Form was submitted');
                },
                error: function(error) {
                    alert("Error");
                }
     });
}

以上不起作用。所以我也尝试了以下方法:

function save_assignment() {
     var formvalues = {
            name       : $('#asgname').text(),
            descripion : $('#asgdescription').text(),
     };
     return $.ajax({
           type: "POST",
           url:  "<?php echo base_url();?>index.php/user/save_assignment",
           data: {values : formvalues},
                success: function(response) {
                    alert('Form was submitted');
                },
                error: function(error) {
                    alert("Error");
                }
     });
   }

但这也行不通。

任何人都可以指导我为什么上述方法不起作用以及这样做的正确方法是什么?

EDIT-1:

通过不工作,我的意思是:在第一种情况下($('form')。serialize()方法)数据没有被发送到服务器。我通过chrome和firefox调试器检查了没有发送对应表单的帖子数据。

在第二种情况下,正在发送空值。即发送到服务器的发布数据如下:

values[name]
values[description]

即。以上数值为空。

EDIT-2:

通过登录firephp,我确认save_assignment PHP脚本正在执行。因此,ajax调用工作正常,但它没有正确传递数据。

3 个答案:

答案 0 :(得分:1)

尝试使用event.preventDefault()之类的,

$("#asgsave").on('click',function(e){
   e.preventDefault();
   save_assignment();
});

在ajax调用后使用return false

function save_assignment() {
    //ajax code
    return false;
}

答案 1 :(得分:0)

你必须在success函数中使用回调,因为ajax是异步的

修改

您是否已在功能中尝试console.log('foo');了?所以你可以测试函数是否被调用;)

编辑2

将以下行添加到您的ajax选项

dataType: "json"

答案 2 :(得分:0)

您只需serialize您的表单值:
http://api.jquery.com/serialize/

但是,查看您的代码,我会抓住并猜测您没有正确地发送您的值。使用jQuery,您可以从输入中获取值,如下所示:

$('#idofInput').val();

http://api.jquery.com/val/

您正在做:$('#asgname').text()

正确格式化数据:data : { foo : 'bar', bar : 'foo' }

最后一个猜测,请确保您的CodeIgniter配置已禁用CSRF保护,否则您需要通过:$this->security->get_csrf_token_name()&amp; $this->security->get_csrf_hash();