首页 > 解决方案 > Chrome 和 Firefox 中使用的相同代码以不同的方式工作

问题描述

在 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();
?>

标签: javascriptphphtmljquerymysql

解决方案


我很惊讶它在 Chrome 中工作,并怀疑它在野外不会如此可靠。

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

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

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

推荐阅读