Codeigniter 3 / Ajax /不接收后期数据

时间:2017-05-12 20:02:30

标签: javascript php jquery ajax codeigniter

我试图在Ajax上发布一些数据以便在控制器中保存,但是每次帖子都是空的时候绝对不可能将它们放到我的控制器中。

这是我的ajax代码(简单版本,但根本不起作用):

$(document).on("click",'.ajax_test',function(){

    $.ajax({
        type:'POST',
        url:_SITE_URL+"ajax-test",
        ContentType : 'application/json',
        cache:false,
        data:{'test':"ok"},
        success:function(msg){
                alert(msg);
        },
        fail:function(msg){
            alert("failed");
        }
    });

});

我的控制器:

public function test_ajax(){

if($this->input->is_ajax_request()):
    echo $this->input->post("test");
endif;  }

当我发送它时,链接没有问题,但我的javascript严格没有回复。我尝试了很多东西,我的配置看起来不错(现在csrf_protection为false) 它与CI 2完美配合,但由于我迁移到CI 3,这拒绝工作。那我做错了什么?或者我需要在codeigniter上检查哪种配置?

非常感谢提前

3 个答案:

答案 0 :(得分:0)

从您的ajax选项中删除ContentType : 'application/json',。它不是必需的,而且令人困惑。当您将ajax选项data:设置为对象(就像您正确的那样)时,它将以控制器期望的方式发送到服务器。

另一个可能的问题是.ajax url选项。

url:_SITE_URL+"ajax-test",

如果_SITE_URL不对,那么控制器将无法找到。导致

  

未找到404页面

您没有看到错误,因为您在

中使用了错误的ajax选项
`fail:function(msg){`  

fail实际上是一个函数。选项和功能之间的细微差别在这里。检查下面的正确用法。 把你的ajax调用放在一起应该看起来像这样

 $.ajax(
 {
      type: "POST",
      url: "controller_name/ajax-test",
      cache: false,
      data: {test: "ok"},
      success: function (data) {
          alert(data);
      },
  }).fail(function () {
    alert("failed");
});

请注意.fail如何链接到$.ajax()并且未在ajax选项集中使用。

答案 1 :(得分:0)

我使用这个AJAX请求模板:

    var _data = {};     
    $.ajax({
                type: 'POST',
                url: "/mycontroller/myfunction",
                data: {
                    insertiondata: _data
                },
                beforeSend: function() {

                },
                complete: function() {

                },
                success: function(_result) {
                    console.log(_result)
                }
            });

在控制器中我抓住这样的参数:

...
class Mycontroller extends MY_Controller {

    public function __construct() {}
    public function myfunction(){

        $mydata= $_POST['insertiondata'];
        ....
}
...

希望这有帮助。 祝你好运,

答案 2 :(得分:0)

您错过了网址上的WNOHANG功能使用dataType

test_ajax
  

确保您的文件名和类名只有首字母大写。 Codeigniter区分大小写。

文件名:Ajax_test.php

使用json_encode

$(document).on("click",'.ajax_test',function(){

    var SITE_URL = "<?php echo base_url();?>";

    $.ajax({
        type:'POST',
        url: SITE_URL + "ajax_test/test_ajax",
        cache:false,
        dataType: 'json',
        data:{
            'test':"ok"
        },
        success:function(msg){
            alert(msg['test']);
        },
        error:function(msg){
            alert("failed");
        }
    });
});