0

私はこの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, ) を更新して表示するメイン ファイル:$racecapitalizeFL

メイン ファイルには次のものが含まれます。

$("button").click(function() {
  $("#topMenu").load("statuswindow.php");
});

私がしたいのは、メイン ウィンドウのdivに htmlstatuswindow.phpが適切に表示されることです。#topMenu

この問題はdocument.write、ページ全体を上書きしたことが原因であると想定しています。問題は、を使用せずに次のことを行うにはどうすればよいかということdocument.writeです。

4

3 に答える 3

7

ページの読み込み後に document.write を使用することはできません。それは、新しいドキュメントを開き、そこにあるものを新しいコンテンツに置き換えることです。

この例では、document.write を使用する必要さえありません。スクリプトタグを使用するだけです。jQuery がスクリプト タグを処理します

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");
于 2013-05-16T16:14:29.990 に答える
3
echo "You have chosen a ".ucFirst($player->race)...

もっと理にかなっているだろう

$.load を使用する場合、ロードするページにスクリプトを実際には必要としません。この場合、php に組み込み関数がある場合、JavaScript の最初の文字を大文字にする理由はまったくありません。

于 2013-05-16T16:22:24.677 に答える
2

問題は document.write がページ全体を上書きするためだと思います。問題は、document.write を使用せずに次のことを行うにはどうすればよいかということです。

まさにそれが何をするからですdocument.write

innerHTMLで試してください:

たとえば、 にコンテンツを追加する場合は、次のように#topMenuします。

document.getElementById('topMenu').innerHTML += capitalizeFL(".$player->race.");
于 2013-05-16T16:17:14.200 に答える