2013-06-01 197 views
0

我試圖將PHP變量傳遞給JS文檔,並將其顯示爲String的一部分。 我的代碼如下所示:將php變量傳遞給js

PHP DOC:

<?php 

    $id = "57.pdf"; 
?> 

<script type="text/javascript"> 
var id = <?php echo json_encode($id); ?>; 
</script> 
<script type="text/javascript" src="../pdfjs/web/viewer.js"></script> 

JS文檔:

var DEFAULT_URL = '../../html/docs/' + id; 

然而,通過id變量不顯示爲字符串在DEFAULT_URL的一部分變量。無論如何,如果我試圖提醒通過的變量,它通常顯示。

+0

你在你的js文件中使用document.ready嗎? – bksi

+2

你爲什麼* json_encode *你的ID? – user544262772

+3

@Oddant和其他人回答:因爲這可以確保該值具有正確的Javascript語法! – deceze

回答

1

嘗試用:

var DEFAULT_URL = '../../html/docs/' + window.id; 

編輯:那麼這應該工作(你應該非常具體的給大家一個名稱替換我的)。

<?php 
    $id = "57.pdf"; 
?> 

<script type="text/javascript"> 
var My = { 
    app: { 
     id: <?php echo json_encode($id); ?> 
    } 
}; 
</script> 
<script type="text/javascript" src="../pdfjs/web/viewer.js"></script> 

和:

var DEFAULT_URL = '../../html/docs/' + My.app.id; 
+0

我得到的結果如下:/ html/docs/undefined –

+0

@JakubSedlacek:http://jsfiddle.net/ - 請發佈您的整個代碼,以便我們可以在黑暗中停止猜測。 –

+0

@JakubSedlacekSébastien的解釋(在其他答案和評論中)是正確的。我在編輯中建議的是命名空間變量。 – rixo

1

這個問題的答案是不json_encode。實際上,json_encode將確保變量可以安全地傳遞給JS,這是有益的。

考慮this PHPfiddle,這正是OP的代碼。 alert經過好。

我在這種情況下,投注什麼是類似這樣的結構:

var id = "57.pdf"; 
(function() { 
    ... 
    var id; 
    alert(id); 
})(); 

在這id已重新宣佈在IETF的地方,與外界id是結果不再訪問。從那裏,alert將是空的。然而,如果沒有看到所有OP的代碼,就不可能知道。

+0

是的,警報工作正常。問題是將變量ID附加到DEFAULT_VAR變量。 –

+0

@Sébastien我們基於相同的假設。如果你是對的,我的答案應該工作。 – rixo

+0

@rixo:不一定。另一種可能性是他(或他的另一個腳本)正在以同樣的方式污染全局命名空間,並且通過忽略'var'關鍵字來重新定義/取消設置'window.id'。儘管如此,很難用心靈感應來猜測。 –