Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
393 views
in Technique[技术] by (71.8m points)

关于AJAX数据提交后台无法获取的问题

问题

前台可以获取到表格的JSON数据,但是通过AJAX POST提交后台没有接收到数据。

前台代码

这里贴的都是主要部分,其他的我就省略了,使用了bootstrap-table插件和bootbox插件,后台使用Thinkphp3.2.3。

HTML代码

<div id="toolbar" class="btn-group">
    ...
    <button class="btn btn-default" id="btn_del">
        <span class="glyphicon glyphicon-remove" aria-hidden="true">删除</span>
    </button>
    ...
</div>
<table id="studentTable"></table>

table是通过插件.bootstrapTable直接创建的,主键是student_id

JS代码

$('#btn_del').on('click', function () {
    var selection = $('#studentTable').bootstrapTable('getAllSelections');
    var json=JSON.stringify(selection);
    function getSelectionId(data) {
        var result=[];
        var temp={};
        for(var i=0;i<selection.length;i++){
            //console.log(data[i].student_id);
            var temp=data[i].student_id;
            result.push(temp);
        }
        //console.log(result);
        return result;
    }
    bootbox.confirm({
        size: 'small',
        title: 'tishi',
        message: '确认要删除选中的数据吗?',
        callback: function () {
            $.ajax({
                url: 'delStudent',
                method: 'post',
                data: getSelectionId(selection)
            });
        }
    });
});

这是我最新试过的一种方法,想直接获取student_id,但是后台还是没有获取到。

PHP代码

public function delStudent()
    {
        $post = I('post.');
        dump($post);
        ...
    }

显示结果

控制台中显示的是注释掉的两行console.log(),可以看到获取到了student_id,然后传递的data中也有数据(这块会不会出错?)——

然后后台是执行了AJAX请求,但是获取的POST数据不正确?

这是其中一种情况,如果我把上面JS代码中AJAX提交的数据改为data:JSON.stringify(selection)提交的结果如下:

目前还是不知道问题出在哪里?

后续补充

目前已知应该是JSON数据问题……我试了下直接传值,显示结果一样。就是我直接从控制台输出数据中复制到代码中——


然后后台返回结果还是一样的……

请问这个有解决办法吗?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

问题解决了……主要问题就是bootstrapTable获取数据的问题,官方文档上写的就是 Return selected rows, when no record selected, an empty array will return.意思就是返回的是一个JSON数组。所以直接调用就行~

$.ajax({
    ...
    data:{json:selection}
});

这样返回的数组就是在POST['json']中了~,然后后台直接读取就是

$post=I('post.json');//我用的是TP3的内置函数,这样读出来的数据都在$post数组中了

结果如下:


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...