2016-02-11 37 views
2

我有以下問題,我的PHP代碼從分貝所需的數據:PHP/MySQL的寫入陣列JSON文件

<?php 

require('dB_connect.php'); 

$reportID = intval($_GET['q']); 


$sql = "SELECT nmech, nelect, nplant, ncivil FROM `flashreport` WHERE ID = '".$reportID."'"; 
$result = mysqli_query($dbc, $sql); 

$emparray = array(); 
while($row =mysqli_fetch_assoc($result)) 
{ 
    $emparray[] = $row; 
} 
file_put_contents("newport.json", json_encode($emparray,JSON_FORCE_OBJECT)); 

mysqli_close($dbc); 

?> 

正如你看到這個寫入一個JSON文件 - 結果:

{"0":{"nmech":"2.00","nelect":"2.00","nplant":"2.00","ncivil":"2.00"}} 

當我使用下面的js代碼從JSON文件中提取:

$.getJSON('newport.json', function(data) { 
console.log(data); 

使用鉻控制檯日誌顯示FOL降低:

[Object] 
0: Object 
nmech: "3.00" 
__proto__: Object 
length: 1 

只顯示第一個鍵/值對而不是全部4個K/V對?有人可以解釋我做錯了請。

+1

嘗試'console.log(data [0]);' –

+1

你檢查過file_put_contents是否成功了嗎?你只是假設更新的json文件已經寫好了。 –

+0

在執行控制檯日誌和文件時,您的nmech值在您的示例中不正確。 – themightysapien

回答

1

將結果寫入json文件是矯枉過正,恕我直言。爲什麼不把json添加到模板或頁面視圖(PHP)中。

<script> 
    // Create settings from PHP/Session and 
    // Initialize Registration Namespace 
    var registrationSettings = <?php echo (!empty($data)) ? @json_encode($data) : json_encode(array()); ?>; 
    Registration.init({ settings: window.registrationSettings }); 
</script> 

很顯然,你沒有註冊命名空間對象,但是這只是一個例子方法從PHP當第一次加載頁面設置設置。

所有你真的需要它來輸出一些數據。

<script> 
    var newport = <?php echo (!empty($emparray)) ? @json_encode($emparray) : json_encode(array()); ?>; 
</script> 

或者,也許更簡單的方法來寫它會。

<script> 
    var newport = <?php echo (!empty($emparray)) ? @json_encode($emparray) : '[]'; ?>; 
</script> 

我可以看到你試圖文件(或緩存)的結果。您應該只需在您的PHP控制器中編寫一個AJAX方法來處理請求。數據可以緩存在Memcached的服務器端或其他一些快速數據處理程序中。大多數PHP框架都支持memcached。

+0

接受了你的建議,並寫了一個AJAX方法,作品,不知道爲什麼jQuery不工作? –

+0

它可能是服務器沒有正確的頭部提供json文件。使用PHP,您應該手動設置標題:header('Content-type:application/json');回聲json_encode($輸出); – jjwdesign

0

這是確定的,因爲你的PHP數組是這樣的:

<?php 
$arr = [ 
    [ 
     "key1" => "value1", 
     "key2" => "value2", 
    ] 
] 

您必須使用數據[0] [ '關鍵']訪問第一個元素的KEY1一部分。

另一個(更好的解決方案)是不要在php中使用while循環,因爲你期望在你的情況下有1個元素從mysql返回。像這樣使用:

<?php 
require('dB_connect.php'); 
$reportID = intval($_GET['q']); 

$sql = "SELECT nmech, nelect, nplant, ncivil FROM `flashreport` WHERE ID = '".$reportID."'"; 
$result = mysqli_query($dbc, $sql); 

//Get first row from db. 
$emparray = mysqli_fetch_assoc($result); 
file_put_contents("newport.json", json_encode($emparray,JSON_FORCE_OBJECT)); 

mysqli_close($dbc); 
?> 

現在你的數據將會像JavaScript一樣在你開始的時候。

+0

已經嘗試了你的建議,這沒有奏效,仍然只輸出相同的對象{nmech:「3.00」} –