2016-02-11 90 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”} –