2016-09-26 14 views
2

ボタンが付いたHTMLページがあります。ボタンをクリックすると、別のjavascriptファイルがPHPファイルにGETリクエストを送信し、JSONオブジェクトが返されます。私のPHPはJSON形式のテキストファイルを読み込み、それをJSONObjectに変換してjavascipt用にエコーします。私は前にいくつかのコードが動作していましたが、同じファイル内にすべてを持つ代わりにAjaxに変更して以来、これ以上はやり尽くさないようです。これは私のコードです:PHPでJSON形式のテキストファイルを書式設定する

readLog.php

<?php 
class test{ 

function clean($string){ 
    return json_decode(rtrim(trim($string),','),true); 
} 

function getLog(){ 
    header('Content-Type: application/json'); 
    $logLines = file('../../../home/shares/flower_hum/humid.log'); 
    $entries = array_map("clean",$logLines); 
    $finalOutput = ['log' => $entries]; 
    echo json_encode($logLines); 

} 
} 
?> 

マイhumid.logファイルは次のようになります。私は私のボタンを押すと

{"date":"26/09/2016", "time":"22:40:46","temp":"16.0", "humidity":"71.0" }  
{"date":"26/09/2016", "time":"23:10:47","temp":"16.0", "humidity":"71.0" } 

は今、これは私が得る応答でありますウェブブラウザでコンソールを確認してください:

レスポンス:

["{\"date\":\"26\/09\/2016\", \"time\":\"22:40:46\",\"temp\":\"16.0\", \"humidity\":\"71.0\" }{\"date\":\"26\/09\/2016\", \"time\":\"23:10:47\",\"temp\":\"16.0\", \"humidity\":\"71.0\" }\n"] 

JSON:

"{"date":"26/09/2016", "time":"22:40:46","temp":"16.0", "humidity":"71.0" }{"date":"26/09/2016", "time":"23:10:47","temp":"16.0", "humidity":"71.0" }\n" 

明らかに何かが、フォーマットが間違っているが、私は何を知りません。私が言ったように、私は同じファイルで自分のPHPとHTMLを持っていたときにこのコードは正常に動作しました。

EDIT:

は、私はまた、このようなものでJSONをフォーマットしようとしたが、それは単にブラケットを出力します。

function getLog(){ 
    $text = file('../../../home/shares/flower_hum/humid.log'); 
    $textRemoved ="["; //Add opening bracket. 
    $textRemoved .= substr($text, 0, strlen($text)-1); (Remove last comma) 
    $textRemoved .="]";//Add closing bracket 
    $json = json_encode($textRemoved); 
    echo $json; 
} 
+0

をあなたにもAJAX JSが含まれているあなたのHTMLを投稿することができますか? – Ma3x

+3

すでにJSONである 'humid.log'を' json_encode() 'していて、それを印刷しているようです(既にエンコードされているデータをエンコードしています)。上記の「humid.log」の内容は有効なJSONではないことを指摘しておきますが、オブジェクトの配列であれば、カンマで区切り、括弧で囲んでください( '[{obj_1}、{obj_2}]')。 –

+0

私はこの問題の一部が、 '$ entries'や' $ finalOutput'の代わりに '$ logLines'をエンコードしていると思います。 – Ma3x

答えて

1

だから私はそれを自分で解決するために管理しました。基本的には、テキストファイルの書式設定が間違っていて、コメント者の中には、私が自分でやっているのであれば、エンコードする必要はありません。私がやったことは、各行の後にカンマを追加するためのログファイルを生成する私のアプリケーションにありました。私のPHPでは、大括弧を追加し、最後のカンマを削除しました。

function getLog(){ 
    header('Content-Type: application/json'); 
    $file = file_get_contents('../../../home/shares/flower_hum/humid.log'); 
    $lengthOfFile = strlen($file)-2; 
    $subFile = substr($file, 0, $lengthOfFile); 
    $res ="["; 
    $res .= $subFile; 
    $res .="]"; 
    echo $res; 
} 
1

+ JSON文字列を2つにジャムすることはできません。それはJSONです。つまり、構文的に正しいjavacript CODEが必要です。あなたは2つのJSON文字列に参加したい場合は、ネイティブのデータ構造にそれらをデコードする必要があり、一緒にそれらの構造に参加し、その後、再エンコードするマージされた新しい構造:生成されます

$temp1 = json_decode('{"foo":"bar"}', true); 
$temp2 = json_decode('{"baz":"qux"}', true); 

$new = array_merge($temp1, $temp2); 
echo json_encode($new); 

{"foo":"bar","baz":"qux"} 

有効なJSON/Javascriptのままです。

なぜですか? 「

42123 

と受信側の、あなたは:その裸の整数を考える有効なJSONです:

json_encode(42) -> 42 
json_encode(123) -> 123 

あなたは2つのJSONエンコード整数とジャムを持っている場合は、「新しい」整数を取得4212342123のように可能な元の値と同じように有効なので、「OK、だから2つの間で分割がどこにあるのか」が分かります。

はっきりと分離可能値として2つの整数を送信すると、アレイが必要となる:

[42,123]