2011-07-08 107 views
2

我的JavaScript如下包含PHP標籤內的JavaScript變量

html="<th>"+<?php echo __(); ?>+"</th>"; 

我想補充另一個JavaScript變量中to __()功能這樣

<?php echo __(<js varible>); ?> 

我試圖

var myvarible=200; 
html="<th>"+<?php echo __("'"+myvarible+"'"); ?>+"</th>"; 
console.log(html); 

不爲我工作

任何一個可以幫助我,請 問候

+0

echo __()是symfony定位函數必須使用它 –

+0

也許你應該更好地解釋你想要實現的。一般來說,當你認爲你需要混合JS和PHP時,一個大紅色的警報燈應該開始閃爍,你應該開始重新思考你的策略。 – nico

+0

你可以發佈你的實際代碼(你使用的代碼)..可能是這將有助於更好地理解你正在嘗試實現什麼和你已經使用什麼方法... –

回答

2

您對服務器端和客戶端代碼的工作方式存在誤解。 (這段代碼假設你使用的是JQuery,但是也可以在沒有它的情況下完成):你可以使用JQuery來完成你想要做的事情(將PHP本地化函數應用於一個Javascript變量):

var myvariable = 'hello'; 
$.get('http://yoursite.com/localize.php?text='+myvariable, function(localizedText) { 
    html = "<th>"+localizedText+"</th>"; 
    console.log(html); 
}); 

然後localize.php應該是這樣的:

<?php 
include('you localization library'); 
echo __($_GET['text']); 
?> 

說明:當你的客戶端代碼(JavaScript)的蜂n在瀏覽器中執行它會調用一個URL來執行你的服務器端代碼(你的PHP __();函數),然後將值返回給客戶端代碼。

+0

感謝親愛的.. –

1
var myvarible=200; 
html="<th>"+<?php echo __("'"+myvarible+"'"); ?>+"</th>"; 
console.log(html); 

這將嘗試把PHP變量「MYVARIABLE」到腳本標籤,你想要的是更接近:

var myvarible=200; 
html="<th>"+"<?php echo __("'myvarible'"); ?>"+"</th>"; 
console.log(html); 

然而,這種情況下,爲什麼不完全跳過PHP?

var myvarible=200; 
html="<th>" + myvarible + "</th>"; 
console.log(html); 
+0

我不能跳過它__echo()是本地化函數在symfony –

+0

什麼是在這種情況下本地化?正如其他地方指出的那樣,JS無法看到/使用PHP本地化,並且PHP無法看到/本地化JS變量 –

+0

爲什麼要嘗試本地化整數? – prodigitalson

1

Javascript在客戶端運行,php在服務器端運行。 所以var myvarible=200; 只會在客戶端執行。

但會在服務器端執行。那時myvariable將無效。

2
var myvariable='<?php echo __("200"); ?>'; 
html="<th>"+myvariable+"</th>"; 
console.log(html); 

但是,對於這個工作,JavaScript將需要在一個.php文件被解釋。

的OP要包含在PHP中調用,這是不可能的,除非你使用AJAX一個JS變量。而且你會同意我這樣的代碼只是爲了引起很大的麻煩,應該不惜一切代價來避免。

嗯是的和不..我不會這樣做。我使用一個幫助器,讓我以一致的方式做這樣的事情。在我看來,我的文件有類似:

<?php js_call('jslib.myFunction(?,?)', __($value), 'some other value'); ?> 

js_call其類似於使用sprintf或除了JS一份準備好的聲明。該參數運行通過json_encode所以引用和什麼是不正確的。所有這些都存儲在一個數組,然後在佈局,就在我的</body>我打電話:

<?php include_js_calls(); ?> 

,然後採取所有呼叫香港專業教育學院有一個js_call製成,將輸出字符串值的腳本標籤中產生的東西像:

<script type="text/javascript"> 
    jslib.myFunction('first value', 'some other value'); 
</script> 

借用Apostrophe Cms

+0

這不會執行PHP語句。 – nico

+0

它將如果它在一個腳本標籤內的PHP文件...這是國際海事組織唯一理解什麼是OP張貼:-)它的同樣作爲回聲'json_decode'輸出到腳本標記你的頭從服務器上處理頁面時創建的動態php變量中配置一些js ... – prodigitalson

+0

不,它不會在JS字符串中有''?'標記,只會在客戶端解析。 – nico

1

PHP這個輝煌是在服務器,JS在客戶端上執行。你不能指望PHP解析JS,實際上PHP永遠不會看到JS語句,因爲只有服務器處理完PHP後纔會處理它們。

1

要在JavaScript中進行本地化(無論出於何種原因),顯然不能直接調用echo __()。

有不同的可能策略

  • 在JavaScript頁面加載時包括一個本地化字符串表。在需要時查找它。這個表可以在服務器端使用echo __()然後被緩存來生成。
  • 對服務器本地化的數據發出ajax請求。可能不適合頻繁更新。