jquery ajax 请求后的刷新命令破坏了 Firefox 中的脚本
A refresh command after a jquery ajax request is breaking the script in Firefox
事情是这样的:我正在开发一种系统,可以在点击某个项目后更新网站的语言。它在 Chrome 和 Internet Explorer、桌面 (Windows 8.1) 或移动设备上运行良好,但在 Firefox(桌面和移动设备)上它不起作用,如果我有任何类型的命令来刷新页面。如果我删除命令并自己刷新页面,它只适用于 firefox。
我依赖于会话变量,所以我需要刷新,对吗?
这是目前的样子:
<head>
<script type="text/javascript" src="../scripts/global/jquery-2.1.3.min.js"></script>
<script>
$(document).on("click",".button",function(){
var language = $(this).attr("id");
$.post("changeLanguage.php", {"language": language});
});
</script>
</head>
<body>
<a class="button" id="en">en</a>
<a class="button" id="de">de</a>
<a class="button" id="pt">pt</a>
<br>
<span id="test">
<?php
if (isset($_SESSION["displayLanguage"]))
{
echo $_SESSION["displayLanguage"];
}
else
{
echo $_SESSION["browserLanguage"];
}
?>
</span>
</body>
我试过刷新:
location.reload();
location.reload(true);
window.location.href=window.location.href;
history.go(0);
并且所有内容都会破坏 firefox 中的脚本,但不会破坏其他脚本。
我没有想法,但我对此很陌生,所以我希望你们能提供帮助。
提前致谢。
编辑:更新:仔细检查后发现页面确实在刷新,但 <span>
内容没有更新,所以问题一定是 firefox 中的某些东西没有让 php 代码再次 运行,而不是破坏脚本。
编辑:更新 2 即使页面按照脚本的指示自行刷新,常规刷新也不会更新 <span>
内容,所以我不得不假设它不会破坏整个脚本,但至少 .post 更新会话变量的请求似乎在存在刷新请求时不起作用。
我认为问题出在您尝试刷新时。您应该等待 $.post()
的成功。 (未经测试,如有问题请评论)
<head>
<script type="text/javascript" src="../scripts/global/jquery-2.1.3.min.js"></script>
<script>
$(document).on("click",".button",function(){
var language = $(this).attr("id");
$.post("changeLanguage.php", {"language": language})
.error(function(jqXHR, errorStr){
console.log("Ajax Error: " + errorStr);
return false;
})
.done(function(){
alert("Success - Reloading.");
location.reload();
})
.fail(function(){
console.log("Ajax Failed.");
return false;
});
});
</script>
</head>
<body>
<a class="button" id="en">en</a>
<a class="button" id="de">de</a>
<a class="button" id="pt">pt</a>
<br>
<span id="test">
<?php
if (isset($_SESSION["displayLanguage"])) {
echo $_SESSION["displayLanguage"];
} else {
echo $_SESSION["browserLanguage"];
}
?>
</span>
</body>
此外,我建议使用 FireBug。此附加组件允许您将控制台日志设置为 Persist。我发现这对 AJAX 测试非常有价值。通常失败的 Ajax 会导致 Link 执行。因此,您可能无法捕获错误或无法在控制台中显示。让它持久化将允许它执行并仍然获得控制台注释。
事情是这样的:我正在开发一种系统,可以在点击某个项目后更新网站的语言。它在 Chrome 和 Internet Explorer、桌面 (Windows 8.1) 或移动设备上运行良好,但在 Firefox(桌面和移动设备)上它不起作用,如果我有任何类型的命令来刷新页面。如果我删除命令并自己刷新页面,它只适用于 firefox。
我依赖于会话变量,所以我需要刷新,对吗?
这是目前的样子:
<head>
<script type="text/javascript" src="../scripts/global/jquery-2.1.3.min.js"></script>
<script>
$(document).on("click",".button",function(){
var language = $(this).attr("id");
$.post("changeLanguage.php", {"language": language});
});
</script>
</head>
<body>
<a class="button" id="en">en</a>
<a class="button" id="de">de</a>
<a class="button" id="pt">pt</a>
<br>
<span id="test">
<?php
if (isset($_SESSION["displayLanguage"]))
{
echo $_SESSION["displayLanguage"];
}
else
{
echo $_SESSION["browserLanguage"];
}
?>
</span>
</body>
我试过刷新:
location.reload();
location.reload(true);
window.location.href=window.location.href;
history.go(0);
并且所有内容都会破坏 firefox 中的脚本,但不会破坏其他脚本。
我没有想法,但我对此很陌生,所以我希望你们能提供帮助。
提前致谢。
编辑:更新:仔细检查后发现页面确实在刷新,但 <span>
内容没有更新,所以问题一定是 firefox 中的某些东西没有让 php 代码再次 运行,而不是破坏脚本。
编辑:更新 2 即使页面按照脚本的指示自行刷新,常规刷新也不会更新 <span>
内容,所以我不得不假设它不会破坏整个脚本,但至少 .post 更新会话变量的请求似乎在存在刷新请求时不起作用。
我认为问题出在您尝试刷新时。您应该等待 $.post()
的成功。 (未经测试,如有问题请评论)
<head>
<script type="text/javascript" src="../scripts/global/jquery-2.1.3.min.js"></script>
<script>
$(document).on("click",".button",function(){
var language = $(this).attr("id");
$.post("changeLanguage.php", {"language": language})
.error(function(jqXHR, errorStr){
console.log("Ajax Error: " + errorStr);
return false;
})
.done(function(){
alert("Success - Reloading.");
location.reload();
})
.fail(function(){
console.log("Ajax Failed.");
return false;
});
});
</script>
</head>
<body>
<a class="button" id="en">en</a>
<a class="button" id="de">de</a>
<a class="button" id="pt">pt</a>
<br>
<span id="test">
<?php
if (isset($_SESSION["displayLanguage"])) {
echo $_SESSION["displayLanguage"];
} else {
echo $_SESSION["browserLanguage"];
}
?>
</span>
</body>
此外,我建议使用 FireBug。此附加组件允许您将控制台日志设置为 Persist。我发现这对 AJAX 测试非常有价值。通常失败的 Ajax 会导致 Link 执行。因此,您可能无法捕获错误或无法在控制台中显示。让它持久化将允许它执行并仍然获得控制台注释。