Php jqueryajax请求后的刷新命令正在破坏Firefox中的脚本

Php jqueryajax请求后的刷新命令正在破坏Firefox中的脚本,php,jquery,ajax,firefox,session-variables,Php,Jquery,Ajax,Firefox,Session Variables,事情是这样的:我正在开发一个系统,在点击一个项目后更新网站的语言。它在Chrome和Internet explorer、桌面(Windows 8.1)或移动设备上都很好用,但在firefox(桌面和移动设备)上,如果我有任何刷新页面的命令,它就不起作用了。只有在我删除命令并自己刷新页面的情况下,它才能在firefox上工作 我依赖于会话变量,所以我需要刷新,对吗 这就是目前的情况: <head> <script type="text/javascript" src=".

事情是这样的:我正在开发一个系统,在点击一个项目后更新网站的语言。它在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>
在firefox中,一切都破坏了脚本,但其他的都没有

我没有主意了,但我对这方面还很陌生,所以我希望你们能帮忙

提前谢谢

编辑:更新:经过更仔细的检查,虽然很快页面看起来确实在刷新,但是
内容没有更新,所以问题一定是firefox中的某些东西不允许php代码再次运行,而不是破坏脚本


编辑:更新2即使页面按照脚本指示自行刷新,定期刷新不会更新更新内容,因此我必须假设它不会破坏整个脚本,但至少更新会话变量的.post请求在刷新请求存在时似乎不起作用。

我认为问题在于尝试刷新时。您应该等待
$.post()
的成功。(未经测试,如有问题请评论)


$(文档)。在(“单击”、“.button”,函数()上){
var language=$(this.attr(“id”);
$.post(“changeLanguage.php”,{“language”:language})
.error(函数(jqXHR、errorStr){
log(“Ajax错误:+errorStr”);
返回false;
})
.done(函数(){
警报(“成功-重新加载”);
location.reload();
})
.fail(函数(){
log(“Ajax失败”);
返回false;
});
});
EN
判定元件
pt


另外,我建议使用FireBug。此加载项允许您将控制台日志设置为持久。我发现这对于AJAX测试非常有价值。失败的Ajax通常会导致执行链接。因此,您可能无法捕获控制台中的错误或显示。让它持久化将允许它执行并仍然获得控制台注释。

您是否看到任何javascript错误?没有。。。但现在我仔细看了看,它实际上似乎在刷新页面,但它并没有改变内容,所以它可能因为某种原因不再运行那个php…在我看来,您的工作流中有一些奇怪的地方:可能是$.post没有将正确的会话id(头,cookie)发送到您的服务器,因此,无法引用该会话,并且当前会话中不会有任何更改,而是在新会话中。请检查changeLanguage.php中的会话。请检查我认为它很好。。。它正在处理其他所有事情,只是Firefox出现了问题,只有当refresh命令存在时,如果我删除它并以旧的方式(F5)刷新页面,它才会工作。。。我怎么能确定?我调用的.php文件基本上就是这个
$\u会话[“displayLanguage”]=$\u POST[“language”]…天哪,它能用!非常感谢你。。。不过我已经使用了FireBug,我会看看如何设置它。再次感谢你,我一个人永远也听不到。当你看到FireBug控制台选项卡时,你会看到3个按钮,
清除
持续
配置文件
。单击Persist可使控制台输出对每一行保持不变。在回调中不包装
位置。reload()
,可能会导致它在AJAX请求完成之前执行良好。这会导致很多奇怪的结果,比如408状态。因此,会话变量可能尚未设置,但浏览器已在刷新。因此,没有更新的
已设置为持久。我对location.reload()的最大问题是,这只发生在firefox、Chrome和IE上,默认情况下必须等待。如果这一切都发生在他们身上,也许我自己会发现一些东西……很难知道,但他们处理这些事件的方式可能会有点不同。我通常从FF开始,然后用Chrome、IE、Opera、mobile等进行测试。
location.reload();
location.reload(true);
window.location.href=window.location.href;
history.go(0);
<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>