【问题标题】:Same code used in Chrome and Firefox work in a different wayChrome 和 Firefox 中使用的相同代码以不同的方式工作
【发布时间】:2020-07-02 07:06:58
【问题描述】:

我在 Firefox 和 Chrome 上使用相同的代码时遇到了一个非常奇怪的行为。 如果我使用 Chrome 一切正常。如果我使用 Firefox,我会遇到奇怪的问题。 让我解释一下我认为问题所在的代码的相关部分:

下面的部分代码让我通过一个工具按钮在 mysql db 中进行某些操作。

有什么问题吗? 我注意到,如果我不使用 location.reload() Firefox 会像方面一样工作,但是每次我进行更改时我都必须通过 F5 主页重新加载。不是一个好主意。 让我知道。 问候

$('.inServizio').change(function() {
    if($(this).prop('checked')) {
        $.post("./reset_stato.php", {ruolo: $(this).prop('name')});
        $.post("./update_stato.php",{stato: "SI", scheda_id: 
        $(this).prop('value')});
        location.reload();
        return;
    } else { 
        $.post("./update_stato.php", {stato: "NO", scheda_id: $(this).prop('value')});
        location.reload();
        return;
    }
});

//这里有:

<?php    
    $conn = new mysqli("localhost","username","password","database");
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }
    $stato = $conn->real_escape_string($_POST['stato']);
    $scheda_id = $conn->real_escape_string($_POST['scheda_id']);
    $sql = "UPDATE reperibili SET rep_onoff='$stato' WHERE id='$scheda_id'";
    
    if ($conn->query($sql)) {
        exit;
    } else {
        exit;
    }
    
    $conn->close();
    
?>

//这里reset_stato.php

<?php    
    $conn = new mysqli("localhost","username","password","database");
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }
    
    $ruolo = $conn->real_escape_string($_POST['ruolo']);
    $rows   = "SELECT * FROM reperibili ORDER BY id DESC";
    
    if ($result = mysqli_query($conn,$rows)) {
        $rowcount = mysqli_num_rows($result);
        if($rowcount > 0) {
            if($ruolo == 'FESTIVO') {
                $sql = "UPDATE reperibili SET rep_onoff='NO' WHERE rep_role='FESTIVO'";
                mysqli_query($conn, $sql);
                exit;        
            } elseif ($ruolo == 'FUORI_ORARIO') {
                $sql = "UPDATE reperibili SET rep_onoff='NO' WHERE rep_role='FUORI_ORARIO'";
                mysqli_query($conn, $sql);
                exit;
            }
        };
    }
    
    $conn->close();
?>

【问题讨论】:

  • 这些 AJAX 请求是异步的,但您重新加载页面完全独立于它们是否已经完成。当您导航到新页面或重新加载当前页面时,浏览器通常会取消任何此类挂起的后台请求。
  • 了解 sql 注入以及准备和绑定查询的重要性
  • ^^ 让我给你介绍my friend Bobby
  • un consiglio ENORME sviluppa i tuoi software in inglese soprattutto se poi hai bisogno di chiedere aiuto - 一个巨大的建议:如果您需要寻求建议,特别是用英语开发您的软件

标签: javascript php html jquery mysql


【解决方案1】:

我很惊讶它在 Chrome 中运行,并怀疑它在野外不会可靠地运行。

您正在开始一两个 ajax 调用,然后立即调用 reload,这会撕下页面并用新副本替换它。由于 ajax 调用尚未完成(还),它们很可能会被取消。

在调用reload之前,您需要等待$.post调用完成,例如:

$.when(
    $.post("./reset_stato.php", {ruolo: $(this).prop('name')}),
    $.post("./update_stato.php",{stato: "SI", scheda_id: $(this).prop('value')}),
)
.then(function() {
    location.reload();
});

【讨论】:

  • 查看 access.log 我现在可以看到 GET 和 POST 以正确的方式发送,并且接缝现在工作正常!但是我在使用 Firefox 时仍然遇到一个奇怪的问题。让我解释一下:mysq 现在可以使用 chrome 或 firefox 正确更新,但是当 chrome 进行页面刷新并且 togle 按钮正确刷新(绿色,红色)时,firefox 没有。我必须手动执行 F5 才能刷新正确的页面。有什么提示吗?
  • @AgiftelLongwave - 鉴于上述情况,我看不出 Firefox 不会刷新的任何原因。您必须对其进行调试——确保在调试器中访问代码,观察网络面板等。
  • 我真的认为与 location.reload 有关。如果我将“location.reload”更改为“location.reload(true)”,则相反。 Chrome 现在有同样的问题,但在 Firefox 中已解决,并且运行良好!!我想这两种浏览器使用代码的方式是不同的。你不觉得吗?
猜你喜欢
  • 1970-01-01
  • 2013-02-13
  • 2011-01-29
  • 2015-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-26
相关资源
最近更新 更多