Jquery - php 事件发生两次

Jquery - php event happening twice

我有一个简单的 chrome 扩展程序,它使用 Jquery 并在我们本地网络的一个页面上工作。 加载该页面时,jquery 对名为 #site 的元素的点击作出反应,然后调用 php 页面。这在过去 6 个月里一直没有问题。

通常 test.php 页面是 运行 一次,查看 error_log 我会看到一行调试输出。我最近将 test.php 移动到一个新服务器,从那以后它似乎触发了两次。查看 apache2 error_log 我看到同一行调试输出两次。

这是我用来尝试找出正在发生的事情的代码的简化版本。

$("body").on('click', '#site', function(e) {

    url = "https://192.168.0.1/test.php'
    console.log ( url )
    
    $.ajax({ type: "GET",   
    url: url,
    cache: false,
    success : function(text) {
        console.log (text)
        }
    });
})

为了测试,test.php 包含:

<?php 

$now = time();
error_log ( $now );
echo $now;
exit;

?>

当我单击 #site 元素时,我在浏览器控制台中看到一行输出。这显示了调用的 URL 和来自 test.php

的结果时间戳

但是查看 apache2 error_log 我看到了两行输出。例如:

[Mon Jan 17 10:12:19.993783 2022] [php7:notice] [pid 17508] [client 192.168.0.1:5173] 1642414339
[Mon Jan 17 10:12:19.994898 2022] [php7:notice] [pid 17508] [client 192.168.0.1:5173] 1642414339

当我运行使用实时代码对此进行操作时,php 页面正在执行数据库插入,结果添加了两个条目。

我正在尝试找出为什么 php 页面显示为 运行 两次。任何人都可以建议可能导致此问题的原因以及如何解决它。我已经检查过,没有其他东西绑定到 #sites

谢谢

更新

查看 chrome 控制台的网络选项卡后,我可以看到两个请求,一个 Preflight 和另一个 xhr。

将以下内容添加到我的 test.php 脚本似乎确实解决了这个问题。

$method = $_SERVER['REQUEST_METHOD'];
if ($method == "OPTIONS") {
    header('Access-Control-Allow-Origin: *');
    header("Access-Control-Allow-Headers: X-API-KEY, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method,Access-Control-Request-Headers, Authorization");
    header("HTTP/1.1 200 OK");
    die();
}

所以页面只返回 headers 预检 cors 检查,而不是 运行 代码。

按照@JohnSmith 的建议,我检查了网络选项卡以查看是否发送了多个请求。

从中我可以看到两个条目,Preflight 和 xhr。 Google 指出了 Preflight 消息是什么,并将以下内容添加到我的 test.php 页面似乎已经解决了问题。

$method = $_SERVER['REQUEST_METHOD'];
if ($method == "OPTIONS") {
    header('Access-Control-Allow-Origin: *');
    header("Access-Control-Allow-Headers: X-API-KEY, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method,Access-Control-Request-Headers, Authorization");
    header("HTTP/1.1 200 OK");
    die();
}