【问题标题】:Posting data to controller using AJAX not working, Code Igniter使用 AJAX 将数据发布到控制器不起作用,Codeigniter
【发布时间】:2016-07-29 18:31:56
【问题描述】:

我刚开始使用 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 的某个地方。是因为表单的阻止默认值吗?我不太确定。目前仍在试验中。

【问题讨论】:

  • 提醒“页面”并检查网址
  • 尝试使用小案例类名base_url+'user/test/'
  • 检查你的base_url,因为它是CI而不是JS中的PHP函数
  • 能否请您提供有关失败的更多详细信息,网络选项卡在浏览器的调试器中显示什么?
  • 抱歉回复晚了,编辑了我在问题中的回复。

标签: javascript php jquery ajax codeigniter


【解决方案1】:

删除按钮中的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】:

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

【讨论】:

  • 不,我没有启用它。
【解决方案3】:

试试看:

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");
                }
            });
        }

【讨论】:

    【解决方案4】:

    我认为你在创建数据 json 时使用下面的代码的错误,json 密钥必须用双引号括起来,然后你才能收到 post 密钥

    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");
        }
    });    }
    

    【讨论】:

      【解决方案5】:

      如果您启用了 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);
                  }
             });
          }
      

      【讨论】:

      • 不,抱歉,在尝试之前我必须先对 CSRF 保护进行更多研究,因为我不知道那是什么。
      【解决方案6】:

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

      jQuery 做了一些幕后技巧并将您的数据转换为form-data-x,这就是它在您的第二次试用中起作用的原因。

      解决方案是使用$this-&gt;input-&gt;raw_input_stream 获取您的JSON 并使用phpjson_decode 对其进行解码。检查下面的完整答案和代码:

      Retrieve JSON POST data in CodeIgniter

      【讨论】:

        猜你喜欢
        • 2021-04-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-06
        • 1970-01-01
        相关资源
        最近更新 更多