javascript - 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();
?>
解决方案
我很惊讶它在 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();
});
推荐阅读
- android - 返回绑定数据或回收器视图问题
- swift - 如何将选择器绑定到 NSObject 中的方法
- java - 如何使用实现父接口的类中的构造函数初始化接口类型的对象?
- git - 如何在本地删除 git 文件而不从远程存储库中删除它们?
- r - 匹配单词字符串并返回不匹配的单词
- spotfire - Spotfire 自定义表达式从列中添加值
- azure - 如何在 Microsoft Azure Vault 中存储密钥库?
- android - 如何使用天气 API 和 JSON 数据来确定当前时间是白天还是晚上(android)
- docker - 带有 JHipster 和 Docker 注册表的 Gitlab CI/CD
- javascript - 在 React Hook 中调整大小时回调未触发