2013-05-16 89 views
0
頁面

我有這個JavaScript函數:的JavaScript文件撰寫重寫PHP

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在使用capitalizeFL大寫首字母后更新並顯示玩家的等級和種族($clas,$race):

主文件包括以下內容:

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

我想發生,是從statuswindow.php的HTML會正確顯示在主窗口的#topMenu股利。

我假設問題是由於document.write覆蓋整個頁面。問題是,如何在不使用document.write的情況下執行以下操作?

回答

7

頁面加載後不能使用document.write。它所做的是打開一個新的文檔,並用新的內容替換你在那裏的內容。

在這個例子中,甚至不需要使用document.write。只需使用腳本標籤。 jQuery will handle the script tags for you

你真的應該跳過使用加載並使用$ .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"); 
+0

ucfirst前一陣子是我的建議... – mplungjan

+0

@mplungjan模仿是最誠懇的奉承形式 –

+0

我甚至沒有看其他帖子,我去了一個三明治,並添加了碼。我有文本在PHP中做,我只是沒有一個例子。 – epascarello

2

我假設的問題是由於使用document.write覆蓋整個頁面。問題是,如何在不使用document.write的情況下執行以下操作?

因爲正是document.write所做的。

嘗試innerHTML

例如,如果你想將內容添加到#topMenu,只是做:當你使用$

document.getElementById('topMenu').innerHTML += capitalizeFL(".$player->race."); 
+0

'document.write'只會覆蓋文檔當前未打開。例如,當HTML仍在被解析時(內聯腳本),它是開放的。如果您在HTML加載後調用它,它會打開一個新文檔 –

+0

仍然不是很好......刪除或移動該示例。在文檔仍然打開的情況下執行document.write是可以的 – mplungjan

+0

我的意思是:如果文檔當前未打開,_document.write將覆蓋該文檔 - 當HTML仍在被解析時,它將打開,因此內聯腳本可能會使用document.write。如果你在HTML加載後調用它,它會在窗口中打開一個新文檔叫做_ – mplungjan

3
echo "You have chosen a ".ucFirst($player->race)... 

會更有意義

。加載你真的不想在你加載的頁面中有任何腳本,並且在這種情況下,絕對沒有理由讓PHP大寫的第一個字母,當PHP有一個內置的功能

+0

Upvoted,但你應該解釋爲什麼($ .load'的魔力) –

+0

在'$ .load'中有腳本的唯一(好)理由是動態地將事件連接到你添加的HTML –

+0

即使我會皺眉,並有事件處理程序在成功,而不是使用.on與祖先範圍 – mplungjan