chrome更新到版本75.0.3770.80(官方内部版本)(64位)后重复请求,并将数据两次保存到数据库问题中

时间:2019-06-07 05:56:31

标签: jquery ajax laravel google-chrome

昨天google chrome update to Version 75.0.3770.80 (Official Build) (64-bit)之后,我面临一个奇怪的问题。

我正在使用Laravel,如果我尝试使用Ajax创建任务,则仅从Google Chrome浏览器添加两次,但是如果我在firefox或其他浏览器中创建同一任务,则只需输入一次即可正常工作。我仅在chrome更新后才遇到此问题,否则之前工作正常。这个新版本有什么变化会影响我的功能吗?

我试图分析此问题,并且发现以下铬和Firefox图像具有以下差异。 globalTask请求在chrome中显示了一个已取消的请求,但我认为它在服务器端正确执行,并在数据库中添加了一个条目。谁能帮我解决问题?

Chrome enter image description here

Firefox enter image description here

代码

$.ajax({
    url: "/globalTask",
    type: "POST",
    headers: {
        'X-CSRF-Token': 'hgdhgsddshjfs214dsf4s56f',
    },
    async: false,
    data: data,
    success: function (response) {

    }
});

4 个答案:

答案 0 :(得分:1)

我想我发现这与preventDefault有关...在我看来,如果您不对原始事件进行preventDefault(),Chrome 75会终止通过FormPost(如果通过JS生成)。

答案 1 :(得分:0)

检查,提交按钮的类型是否为“提交”或“按钮”。如果您的Ajax提交表单,则html按钮的类型应为“按钮”,否则两者均被提交。我认为这为我解决了问题。

答案 2 :(得分:0)

在我们以任何形式提交的网站中,我也看到了此问题(两个HTTP POST,其中一个已“取消”)。我们正在将ASP.NET MVC 5与JQuery 1.11和Bootstrap 3.0.3。一起使用。

将JQuery更新到最新版本(3.4.1)解决了我们的问题。在Chrome 74中查看Chrome Network跟踪时,启动器会说“ Other”,但是在Chrome 75中,其中一个请求将显示“ Other”,第二个请求将具有转到JQuery的触发函数的JScript跟踪。

最初将此代码段添加到了我们的登录页面,并解决了该问题。 Network跟踪显示单个请求,但这是作为Initiator而不是'Other'的JQuery堆栈跟踪。不知道这段代码是如何“解决”这个问题的,所以我会避免将它作为创可贴。

// Chrome 75 is having double submit problems. This change stops that behavior, but may be an issue in JQuery 1.x
$(document).on('submit', 'form', function () {
   var button = $(this).find('input[type="submit"]');
   button.attr('disabled', 'disabled');
});

看起来Google可能正在调查此问题:Chromium bug report

答案 3 :(得分:0)

检查您的Chrome扩展程序。就我而言,当我禁用了新的Bit Torrent Web附带的“ Safe Torrent Scanner”扩展程序时,问题已解决。