【问题标题】:AJAX Post twice in Laravel frameworkAJAX Post 在 Laravel 框架中两次
【发布时间】:2020-04-26 05:03:59
【问题描述】:

我在 stackoverflow 中搜索了相同的标题,但我没有运气.. 这是我的 ajax 脚本

$.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': $('input[name="_token"]').val()
        }
    });

    $('#btn-submit').on('click', function(e)
    {
        e.preventDefault();
        var nama_kelompok_jalan = $('input[name="nama"]').val();
        var action = $('#csrf-token').attr('action');
        $.ajax({
            type:'POST',
            url:action,
            data:{nama:nama_kelompok_jalan},
            success:function(data){
                alert(data.success);
                location.reload();
            },
            error: function () {
                alert('Tidak ada pelanggan yang dipilih');
            }
         });
    });

这里是我的控制器

public function store(Request $request)
    {
        $name    = $request->nama;
        $nometer = $request->nometer;

        $kelompok       = new Kelompok;
        $kelompok->nama = $name;
        $kelompok->save();
        return response()->json(['success'=>'Data Kelompok telah tersimpah..']);
    }

这是我的刀

              <input type="hidden" action="{{route('kelompok.store')}}" name="_token" id="csrf-token" value="{{ Session::token() }}" />
                <div class="kt-portlet__body">

                    {{-- <div class="form-group form-group-last">
                        <div class="alert alert-secondary" role="alert">
                            <div class="alert-icon"><i class="flaticon-warning kt-font-brand"></i></div>
                            <div class="alert-text">
                                The example form below demonstrates common HTML form elements that receive updated styles from Bootstrap with additional classes.
                            </div>
                        </div>
                    </div> --}}
                    <div class="form-group">
                        <label>Nama Kelompok</label>
                        {{Form::text('nama', '', ['min'=>'1','max'=>'30','class'=>'form-control','placeholder'=>'E.g: Juanda','required'])}}
                    </div>
                </div>
                <div class="kt-portlet__foot">
                    <div class="kt-form__actions">
                        <button id="btn-submit" type="btn" class="btn btn-primary">Submit</button>
                        <button type="reset" class="btn btn-secondary">Cancel</button>
                    </div>
                </div>

        </div>

这是我不使用 laravel 形式来避免来自 laravel 和 ajax 的双重发布,但我仍然得到双重发布,我尝试在网络部分检查元素我的脚本只加载一个而不是两次,我尝试来自控制器的 console.log 响应数据只有一个,但在mysql中我得到了两个具有相同值的新插入数据.. 对我有什么建议吗??谢谢...

还有一个问题.. 在我的笔记本电脑上的开发环境中工作正常,这是在带有生产环境的服务器上,两者都具有 php.ini 上具有相同配置的 php 7.3

【问题讨论】:

  • 你调试了多少次?
  • 可能是多次提交问题...点击后尝试禁用按钮看看
  • 你有表单标签吗?如果是,那么分享?
  • @RishiRaut 对很多人来说,我不知道我在这里失去了什么
  • @RishiRaut 我不使用标签,这就是我所有的脚本

标签: jquery ajax laravel


【解决方案1】:

type="btn" 部分无效。您应该尝试使用type="button"。很可能是因为无效的按钮类型,导致按钮被解释为提交按钮。

代码应该是

<button id="btn-submit" type="button" class="btn btn-primary">Submit</button>

您可能将它与 Bootstrap 类混淆了。

【讨论】:

  • 没关系,我只是避免 type="submit",它仍然从 ajax 而不是 laravel 发布
  • 请尝试更改它。我保证它会起作用,基本上属性类型的值btn 不存在。检查这个,点击每个按钮,看看会发生什么。 jsfiddle.net/2wu8sxod
  • 另外,即使你避免了按钮类型,默认按钮类型是提交,所以你特地要注明type="button"
  • 不..不行,我只是试试..但谢谢你的建议......
  • 我只是试试这个 提交,来自 ajax 的帖子仍然有效,但同样的问题,两次发帖
【解决方案2】:

您需要进行一些更改

<button id="btn-submit" type="btn" class="btn btn-primary" onClick="submitForm()">Submit</button>

然后在你的 javascript 中

$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('input[name="_token"]').val()
    }
});

function submitForm() {

    var nama_kelompok_jalan = $('input[name="nama"]').val();
    var action = $('#csrf-token').attr('action');
    $.ajax({
        type: 'POST',
        url: action,
        data: {
            nama: nama_kelompok_jalan
        },
        success: function (data) {
            alert(data.success);
            location.reload();
        },
        error: function () {
            alert('Tidak ada pelanggan yang dipilih');
        }
    });


}

【讨论】:

  • 还要发两次?
  • 是的..我很困惑,因为它在我的笔记本电脑上正常工作,但这是在服务器上,两个相同的 php 版本和配置..
【解决方案3】:

我解决了我的问题,删除了这个location.reload();

我不知道为什么...哈哈哈,谢谢大家..

【讨论】:

    猜你喜欢
    • 2011-07-15
    • 1970-01-01
    • 2016-06-03
    • 1970-01-01
    • 1970-01-01
    • 2011-10-01
    • 2015-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多