2015-10-12 74 views
0

我知道這個話題已經討論了幾次,但我似乎無法找到我做錯了什麼。php變量爲JavaScript與json_encode

我在做什麼: 用戶鍵入一個數字,然後通過單擊按鈕創建一個具有該列數的表格。

繼承人的PHP:

<?php 
$twig = require_once('bootstrap.php'); 
$hostname = 'localhost'; 
$username = 'root'; 
$password = ''; 
$conn = new PDO("mysql:host=$hostname;dbname=mydb", $username, $password); 

echo $twig->render('index.html', array()); 

$numOfRows = 1; 

if(isset($_POST['button'])){ 
    $numOfRows = $_POST['num_input']; 
} 

HTML/JavaScript的:

<html> 
<head> 
<script> 
function insertRows(){ 
    var numOfRows = <?php echo json_encode($numOfRows) ?>; 
    var out = "<table><tr><th>test</th>"; 

    for (i = 0; i < numOfRows; i++){ 
     out += "<th>test</th>"; 
    } 

    out += "</tr></table>"; 
    document.getElementById("table").innerHTML = out; 
} 
</script> 
</head> 

<body> 
<form action="index.php" method="post"> 
    <textarea id="num_input" name ="num_input"></textarea> 
    <button type="button" name="button" onclick="insertRows()"> Go </button> 
</form> 

<p id="table"></p> 

</body> 
</html> 

世界上沒有錯誤,或者什麼,因爲我不使用IDE,只是做在vim但錯誤的是隻是不會發生。如果我將for循環中的「numOfRows」更改爲數字,那麼我很確定json_encode是問題所在。

謝謝!

編輯: 只是爲了測試它,我用了一個字符串變量$str = "test"; php文件,而不是使用for循環,我只是編輯JavaScript來

var str = <?php echo json_encode($str); ?>; 
alert(str); 

,我也試過

var str = <?php echo $str; ?>; 
alert(str); 

但沒有任何工作。

+0

這就是JS VAR numOfRows不是PHP的一個替代

var numOfRows = <?php echo json_encode($numOfRows); ?>; 

。爲什麼我必須在JavaScript變量中使用$? – mcCat

+0

你爲什麼使用json? –

+1

爲什麼'numOfRows'實際上是列數的計數? – Phylogenesis

回答

-1

你沒有忘記任何$。 JS不需要$變量。

就你的json_encode而言,如果你只是將一個整數從PHP傳遞給JS,那麼就不需要json_encode。只需將JS中的變量傳遞給JS源代碼中的<?=$numOfRows?>即可。

+0

不要認爲他們已啓用短標籤。 – Barmar

+0

使用PHP 5.4或更高版本的'<?='*(回顯速記)*可以在沒有啓用短標籤的情況下使用......假設您已經啓用了短標籤*或* 5.4+:http:/ /php.net/manual/en/migration54.new-features.php – CD001

0

編輯:你錯過了一個;在

<?php echo json_encode($numOfRows) ?> 

應該

<?php echo json_encode($numOfRows);?> 

而在這些情況下,如果將是很好的檢查服務器日誌,這將會被自動讓你更好地發現這些錯誤你自己。


您正在混入整數和字符串。 PHP中的數據庫總是返回字符串,以及您在for循環中將變量用作int的方式。

以下改變我相信會達到正確的結果。

$numOfRows = intval($_POST['num_input']); 

如果您使用PHP的轉換爲整數函數,那麼在全局級別。

+0

但在比較之前,'i Barmar

+0

試過了,但不幸的是它沒有幫助:/ – mcCat

+0

@barmar你完全正確,我的錯誤。 –

3

json_encode在這種情況下不是必需的。

只需使用

var numOfRows = <?php echo (int)$numOfRows; ?>; 
+0

不工作... :( – mcCat

+0

在PHP部件中添加了分號,可能會有所幫助 –

+0

如果這樣也行不通,那麼'json_encode()'沒有什麼錯。問題在於,$ numOfRows在該行代碼運行時未定義,$ numOfRows在第一個代碼塊中定義,但兩個代碼塊如何相互連接?將它設置在一個地方不會神奇地使它在別處工作# – Simba