jquery ajax请求后的刷新命令破坏了Firefox中的脚本



事情是这样的:我正在开发一个系统,在点击一个项目后更新网站的语言。它在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执行。因此,您可能无法捕获错误或在控制台中显示错误。将其持久化将允许它执行并仍然获得控制台注释。

相关内容

  • 没有找到相关文章

最新更新