事情是这样的:我正在开发一个系统,在点击一个项目后更新网站的语言。它在Chrome和ie浏览器、桌面(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。此附加组件允许您将控制台日志设置为持久化。我发现这对于AJAX测试非常有价值。Ajax失败通常会导致Link执行。因此,您可能无法捕获错误或在控制台中显示错误。将其持久化将允许它执行并仍然获得控制台注释。