使用AJAX将数据发布到控制器不起作用,Code Igniter

时间:2015-09-03 08:56:12

标签: javascript php jquery ajax codeigniter

我刚开始使用PHP OOP并且目前正在使用Code Igniter框架。我在使用AJAX将数据发送到控制器时遇到了一些问题,所以我想出了一种最简单的方法来测试AJAX是否正常工作,这是无效的。

外部JS文件:

function confirm_add_user()
{
    var name1 = $("#name").val();
    var page = base_url+'User/test/';

    $.ajax({
        url: page,
        type: 'POST',
        data:{ nameA : name1},
        success:function(data) {
            alert("Pass");
        },
        error: function(){
            alert("Fail");
        }
    });
}

控制器:

public function test()
{
    $name = $this->input->post('nameA');

    echo "Name: $name";
}

查看:

<button type="submit" class="btn btn-primary" id="submit" onclick="confirm_add_user()">Submit</button>

检查我已完成:

1. JQuery file is linked.
2. name1 or $("#name").val() gets the correct data from it's text input field.
3. Base_url is the correct url.

如果我错了,请纠正我,当右键单击提交按钮时,它应该提醒/弹出Pass对话框。但是,我得到的是Fail,如果ajax失败,我会指示警报。一直试图解决这个问题但是我还没有得出任何问题的结论,所以我来到stackoverflow寻求指导和帮助。有什么可能或可能是问题的任何帮助?

我的主要目标是能够在当前页面上加载视图(不确定它是否是正确的方式)但我还没有进展,因为我无法发送任何数据从我的表单输入字段到控制器函数。

编辑:

经过一段时间的尝试,我发现当我直接在视图中编写js时,特别是使用这些代码,它可以工作:

$(document).ready(function(){
    $('#add_user_form').on('submit', function(form){
        form.preventDefault();
        $.post('<?php echo base_url();?>/index.php/User/add_this_user', $("#add_user_form").serialize(), function(data){
            $('div.test').html('gaefwef');
        });
    });
});

然而,当我在外部js文件中使用它时,它并没有。我试过一个测试函数只是为了看看js文件是否通过使用警报正确链接,它确实存在问题仍然存在于ajax中。是因为表单的防止默认吗?我不太确定。现在仍在尝试。

6 个答案:

答案 0 :(得分:0)

请检查您是否启用了csrf保护。如果您已启用csrf验证,则必须在post字段中传递CSRF令牌。

答案 1 :(得分:0)

删除按钮中的type='submit'。它实际上以默认方式提交您的表单,因此使用type='button'更新您的按钮标记,它将起作用

<button type="button" class="btn btn-primary" id="submit" onclick="confirm_add_user()">Submit</button>

和你的javascript ajax函数

更新此行

data:{"nameA":name1},

答案 2 :(得分:0)

试试:

function confirm_add_user()
        {
            var nameA = $("#name").val();

            $.ajax({
                url: "<?php echo base_url() ?>User/test/" +nameA,
                type: 'POST',
                data:{},
                success:function() {
                    alert("Pass");
                },
                error: function(){
                    alert("Fail");
                }
            });
        }

答案 3 :(得分:0)

我认为你创建数据json的错误使用下面的代码,json键必须是双引号才能收到帖子密钥

function confirm_add_user(){
var name1 = $("#name").val();
var page = base_url+'User/test/';

$.ajax({
    url: page,
    type: 'POST',
    data:{ "nameA" : name1},
    success:function(data) {
        alert("Pass");
    },
    error: function(){
        alert("Fail");
    }
});    }

答案 4 :(得分:0)

如果您启用了CSRF保护,请尝试这样的操作。

function confirm_add_user(){

        $.ajax({
            url: '<?php echo base_url() ?>User/test',
            type: 'post',
            data: {
                nameA: $('#name').val(),
                <?php echo $this->security->get_csrf_token_name();?>: '<?php echo $this->security->get_csrf_hash();?>'
            },
            success: function (data) {
                console.log(data);
            },
            error: function(xhr, desc, err){
                console.log(err);
            }
       });
    }

答案 5 :(得分:0)

我猜您要将数据发送为json。 CodeIgniter不知道如何做到这一点,因此您需要以不同方式获取请求数据。

jQuery做一些引人入胜的技巧并将您的数据转换为form-data-x,这就是为什么它在您的第二次试用中有效。

解决方案是使用$this->input->raw_input_stream来抓取您的JSON并使用php json_decode对其进行解码。检查下面的完整答案和代码:

Retrieve JSON POST data in CodeIgniter