用户
 找回密码
 入住 CI 中国社区
搜索
查看: 13382|回复: 12
收起左侧

[HELP] CI的ajax问题,接收不到post过来的数据

[复制链接]
发表于 2014-8-13 19:40:40 | 显示全部楼层 |阅读模式
在view中写了个ajax,post到一个控制器中,但是在控制器中无法接收到数据,请见代码
view中的ajax:
<script language="javascript">
$(document).ready(function(){
        $('#addtocart').click(function(){
                var datatrans  = new Array();
                datatrans[0]=$('#goods_id').val();               
                datatrans[1]=$('#goods_name').val();
                datatrans[2]=$('#goods_img').val();
                datatrans[3]=$('#goods_price').val();
                datatrans[4]=$('#buyer_id').val();
                datatrans[5]=$('#goods_num').val();
                //alert(datatrans);此处测试证明datatrans 数组是已经取到了页面的值的;
                $.ajax({
                        url: "<?php echo site_url('flow/addtocart')?>",
                        type: "POST",
                        dataType: "json",
                        async:false,//表示只有ajax执行完毕了才继续往下执行
                        data: {goods:datatrans},       
                                error: function(){  
                                        alert('Error loading XML document');  
                                },       
                                success: function(data,status) {         
                                        alert(data);
                                }
                });       
        })


})
</script>


控制器flow.php中接收数据的方法代码:
public function addtocart(){
        echo $this->input->post('goods');
}


代码如上,执行后报错,弹出ajax的alert('Error loading XML document');  错误,我如果把echo $this->input->post('goods');改成echo $this->input->post('goods[0]');则不报错,但是弹出的null,就是执行成功了,但是数据返回是空的,也就是控制器没接收到数据,请各位大神指导下,我迷茫了,ci是不是有现成的ajax使用方法,请指教
发表于 2014-8-14 15:47:00 | 显示全部楼层
把error打出來看看?

                        error: function(XMLHttpRequest, textStatus, errorThrown) {
                                alert(XMLHttpRequest.status);
                                alert(XMLHttpRequest.readyState);
                                alert(textStatus);
                        },

发表于 2014-8-22 09:45:57 | 显示全部楼层
最大的问题 应该出在你穿的参数 不能是一个数组,“如果为数组,jQuery 将自动为不同值对应同一个名称。如 {foo:["bar1", "bar2"]} 转换为 "&foo=bar1&foo=bar2"。
” 这是jquery手册里面的话
发表于 2014-8-14 15:54:31 | 显示全部楼层
控制器返回中沒有加上json_encode,

public function addtocart(){
        $ret = $this->input->post('goods');
        echo json_encode($ret );
}
 楼主| 发表于 2014-8-13 20:25:35 | 显示全部楼层
请大神指点啊,都不会吗,是因为我传的数据带特殊字符吗
发表于 2014-8-14 13:43:44 | 显示全部楼层
json_encode
数组怎么可能echo出来呢~~
发表于 2014-8-14 14:28:10 | 显示全部楼层
http://codeigniter.org.cn/forums ... hread&tid=19183 用 kint自己调试看下 不做 伸手党
发表于 2014-8-14 15:51:47 | 显示全部楼层
data: {goods:datatrans},這個沒寫錯?
改成data: datatrans看看。

另外 將dataType: "json",這樣可以避免解析joson的錯誤,等找到錯誤再加回去。
发表于 2014-8-20 10:14:25 | 显示全部楼层
data: {goods:datatrans},  
改为
data: {goods[]:datatrans},  
你要传递数组,要么现编码了。要么就传成数组了
发表于 2014-8-20 11:02:23 | 显示全部楼层
貌似数组不能这样传递的吧{:soso_e136:}

本版积分规则