为什么 Ajax post 会同时新建多条纪录?

我发现一个奇怪的现象,就是如果前端页面使用ajax的post函数在后端laravel使用

Model::create($request->all())

新建纪录时,会经常出现(不是每次都会)一次新建两条甚至有时候三条完全相同的纪录(这些纪录只有ID不一样,其他连时间戳都一样显示是同时新建的)的情况,即使我把代码改成firstOrCreate也不行:

$o = Model::firstOrCreate([
        'key1' => $request->key1,
        'key2' => $request->key2
]);

$o->value1 = $request->value1;
$o->save();

我查了一下stackoverflow
http://stackoverflow.com/questions/4263599...
有说js有提交2 requests的情况?
请问有谁知道为什么会出现这种情况?如何比较好的解决?

以下是前端js代码

                $('.set-score').click(function () {
                    $(this).attr('disabled', true);
                    var id = $(this).attr('id').substr(10);
                    var score = $('select#select-score-' + id).children('option:selected').val();
                    var comment = $('input#edit-comment-' + id).val();
                    $.ajax({
                        url: '/teacher/score',
                        type: 'POST',
                        data: {
                            _token: '{{ csrf_token() }}',
                            answer_id: id,
                            score: score,
                            comment: comment,
                            teacher_id: '{{ Auth::guard('teacher')->user()->id }}'
                        },
                        success: function (data) {
                            score = JSON.parse(data);
                            $('span#score-' + id).text(score.score);
                        },
                        error: function (data) {
                            alert('Error! please try later!');
                            $(this).prop('disabled', false);
                        }
                    });
                });
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 1

你看一下Chrome的控制台是否发起了两次ajax post连接?另外其他方面我觉得你这个post提交的时候_token这个字段每次都用一样的应该会出问题。

8年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!