Javascript document.write覆盖php页面

Javascript document.write覆盖php页面,php,javascript,jquery,html,ajax,Php,Javascript,Jquery,Html,Ajax,我有一个Javascript函数: function capitalizeFL(string) { //takes a string, returns it with first letter capitalized return string.charAt(0).toUpperCase() + string.slice(1); } 一个名为statuswindow.php的文件,其中包括以下内容: <?php $raceV = "<script>docume

我有一个Javascript函数:

function capitalizeFL(string) { //takes a string, returns it with first letter capitalized
    return string.charAt(0).toUpperCase() + string.slice(1);
}
一个名为statuswindow.php的文件,其中包括以下内容:

<?php
    $raceV = "<script>document.write(capitalizeFL(\"".$player->race."\"));</script>";
    $clasV = "<script>document.write(capitalizeFL(\"".$player->clas."\"));</script>";
    echo "You have chosen a " . $raceV. " " .$clasV ."!";
?>
$("button").click(function() {
  $("#topMenu").load("statuswindow.php");
});
我希望发生的是,statuswindow.php中的html将正确显示在主窗口的topMenu div中


我假设问题是由于document.write覆盖了整个页面。问题是,在不使用document.write的情况下,如何执行以下操作?

页面加载后不能使用document.write。它所做的是打开一个新的文档,并用新的内容替换您所拥有的内容

在本例中,甚至不需要使用document.write。只需使用脚本标记

您真的应该跳过使用load,使用$.get或$.getJSON,自己处理响应

让服务器返回一个JSON对象

{
  raceV : "foo",
  clasV : "bar",
  outStr : "You have chosen a {1} {2}!"
}
而JavaScript将是

$.getJSON("statuswindow.php", function(data) {
    var outString = data.outStr;
    outString = outString.replace("{1}",capitalizeFL(raceV));
    outString = outString.replace("{2}",capitalizeFL(clasV));
    $("#topMenu").html(outString );
})
但真正的问题是:

为什么不在PHP中完成所有这些工作。JavaScript没有理由这么做

不需要JavaScript

<?php
    $raceV = ucfirst($player->race);
    $clasV = ucfirst($player->clas);
    echo "You have chosen a " . $raceV. " " .$clasV ."!";
?>
我假设问题是由于document.write覆盖了整个页面。问题是,我如何在不使用document.write的情况下执行以下操作

因为这正是document.write所做的

尝试:

例如,如果要向topMenu添加内容,只需执行以下操作:

document.getElementById('topMenu').innerHTML += capitalizeFL(".$player->race.");
会更有意义


当您使用$.load时,您实际上不希望在加载的页面中使用任何脚本,在这种情况下,当php具有内置函数执行此操作时,绝对没有理由将javascript大写作为第一个字母。

document.write仅在文档当前未打开时覆盖文档。例如,当HTML仍在内联脚本中解析时,它是打开的。如果在HTML加载后调用它,它会打开一个新文档,但仍然不是很好。。。例如,移除或移动。在文档仍处于打开状态时执行document.write是可以的,我的意思是:如果文档当前未打开,document.write将覆盖文档-它在HTML仍处于解析状态时打开,因此内联脚本可以使用document.write。如果在加载HTML后调用它,它将在调用的窗口中打开一个新文档,打开一个新文档将覆盖当前文档。。。作为一名开发人员,这么多年来,我从未发现document.write.document.write在加载外部文件/资源方面有什么用处,基于某些环境条件,在$中加载脚本的唯一好理由是动态地将事件连接到您添加的HTML,即使这样,我也会皱眉,而在success中使用或使用事件处理程序。在具有祖先作用域的上,但这需要您对调用的页面了解太多,如果加载的页面执行document.write和jQuery解析脚本等愚蠢的操作,那你就完蛋了……我的观点是,如果一块HTML需要调用方连接自己的处理程序,那么每次加载它时都必须重新编码连接。理想情况下,您可以编写一个包装器来处理这两个问题。。。但是有些用户可能更喜欢调用$.load并让它正常工作。@mplungjan模仿是最真诚的奉承形式。我甚至没有看其他帖子,我去拿了一个三明治并添加了代码。我的文章是用PHP写的,我只是没有一个例子。真正的问题是海报不理解PHP和JS101的东西。
document.getElementById('topMenu').innerHTML += capitalizeFL(".$player->race.");
echo "You have chosen a ".ucFirst($player->race)...