AJAX 请求触发两次,而成功调用一次

Posted

技术标签:

【中文标题】AJAX 请求触发两次,而成功调用一次【英文标题】:AJAX request firing twice while success is called once 【发布时间】:2018-02-24 10:48:18 【问题描述】:

我使用的是 laravel 5.4,我的 Ajax 功能每次被调用两次,因此我创建了两个用户,但是我想每次点击创建一个用户

实际上它包含另一个页面,而该页面没有它在

$(document).ready(function()

或任何类似的功能

$(document).on('click','#addproject',function()

但它们包含脚本标签 但如果我不包括它们,那么 Ajax 只会被调用一次 Ajax 调用:

$(document).on('click','#addproject',function()

        $.ajax(
            type:'get',
            url:"!! URL::to('addProject') !!",
            data:,
            success:function(data)
                console.log('success');
                console.log(data);
                console.log(data.length);
                $("#newproject").fadeIn();
            ,
            error:function()

            ,
        );
    );

路线:

Route::get('/addProject','HomeController@addProject');

控制器:

  public function addProject(Request $request)
        $project = new Project;
        $data = array(
        );

        $project->create($data);
    

【问题讨论】:

在点击事件监听器里面放一个alert()或者console.log()来检查它是否显示两次? 是的,它被调用了两次 查看我提供的答案 @MayankPandeyz 没用 我在上面做了一些改动,请检查一下 【参考方案1】:

我解决了,原来是我用load()加载这个页面,但我应该用window.location.href = "updateform";加载这个页面 虽然非常基本的错误。 并且解决方案可能是我的应用程序特定的。

【讨论】:

【参考方案2】:

也许您可以尝试使用.one() 方法。

<script type="text/javascript">
var handler = function(e)

    $.ajax(
      type:'get',
      url:"!! URL::to('addProject') !!",
      data:,
      success: function(data)
        console.log('success');
        console.log(data);
        console.log(data.length);
        $("#newproject").fadeIn();
        $('#addproject').one('click', handler);
      ,
      error: function()
    );
    e.stopImmediatePropagation();
    return false;


$('#addproject').one('click', handler);

一种方法将确保每个事件类型的每个元素最多执行一次处理程序。成功后需要重新绑定事件处理程序。

【讨论】:

但是在最后一次调用中调用了成功函数,所以我必须忽略第一个而不是第二个【参考方案3】:

试试这个,

$("#addproject").on('click',function()
    //your code here
);

而不是,

$(document).on('click','#addproject',function()
    //your code
);

【讨论】:

以上是关于AJAX 请求触发两次,而成功调用一次的主要内容,如果未能解决你的问题,请参考以下文章

如何防止ajax调用两次触发

何时出现错误:或成功:在 Ajax 请求中调用的处理程序

成功登录 API 请求后,Angular 会为每个 API 调用触发额外的 OPTION 请求

Kotlin 协程在 Compose 函数中调用了两次而不是一次

Ajax 状态为 200 但错误事件触发而不是成功

jQuery ajax,一直调用error方法。