我有这个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 ."!";
?>
现在主文件使用ajax更新并显示玩家的班级和种族($clas
,$race
),在使用capitalizeFL
将其首字母大写后:
主文件包括以下内容:
$("button").click(function() {
$("#topMenu").load("statuswindow.php");
});
我想要发生的是,来自statuswindow.php
的html将在主窗口的#topMenu
div中正确显示。
我认为问题是由于document.write
覆盖了整个页面。问题是,如何在不使用document.write
的情况下执行以下操作?
答案 0 :(得分:7)
页面加载后无法使用document.write。它的作用是打开一个新文档,用新内容替换你所拥有的文件。
在此示例中,甚至不需要使用document.write。只需使用脚本标签即可。 jQuery will handle the script tags for you
你真的应该跳过使用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 ."!";
?>
并且jQuery加载将是相同的
$("#topMenu").load("statuswindow.php");
答案 1 :(得分:3)
echo "You have chosen a ".ucFirst($player->race)...
会更有意义
当你使用$ .load时,你真的不想在你加载的页面中有任何脚本,在这种情况下,当php有内置函数时,将javascript大写为第一个字母绝对没有理由
答案 2 :(得分:2)
我假设问题是由于document.write覆盖了整个页面。问题是,如何在不使用document.write的情况下执行以下操作?
因为document.write
正是如此。
尝试innerHTML:
例如,如果您要将内容添加到#topMenu
,请执行以下操作:
document.getElementById('topMenu').innerHTML += capitalizeFL(".$player->race.");