2017-03-11 16 views
0

私はturn onボタンを押すと、lighton.jsonという名前のJSONファイルを開くturnon()関数を呼び出し、そこに{light ":" "}しかし、それは私のために働かないし、私は理由を知らない。誰か助けてくれますか?AJAXを使用してJSONファイルを編集

<?php 
$light = $_GET['light']; 
$file = fopen("light.json", "w") or die("can't open file"); 
if($light == "on") { 
    fwrite($file, '{"light": "on"}'); 
} 
else if ($light == "off") { 
    fwrite($file, '{"light": "off"}'); 
} 
?> 

<html> 
    <head>  
    <meta charset="utf-8"> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 

    <title>LED for ESP8266</title> 

    <script src="https://code.jquery.com/jquery-2.1.4.min.js"></script> 
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script> 
    <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css" rel="stylesheet"> 
    <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css"> 

    </head> 
    <body> 
    <div class="row" style="margin-top: 20px;"> 
     <div class="col-md-8 col-md-offset-2"> 

     <form> 
      <input type="button" id="StartButton" value="Turn On" onClick="turnOn()"> 
     </form> 
     <!--<button onclick="turnOn()">Turn On</button> 
     <button onclick="turnOff()">Turn Off</button>--> 

     <div class="light-status well" style="margin-top: 5px; text-align:center"> 

     <script type="text/javascript"> 
      function turnOn() { 

       $.ajax({ 

        type: "POST", 
        contentType: "application/json; charset=utf-8", 
        url: "http://192.168.1.108/test/light.json", 
        data: {"light": "on"}, 
        dataType: "json", 
        success: function (data) { 
         alert(data); 
        }, 
        error: function (result) { 
         alert("Error"); 
        } 
       }); 
      } 
     </script> 

     </div> 
     </div> 
    </div> 
    </body> 
</html> 

ありがとうございます!

+0

「動作しません」とはどういう意味ですか?エラーが出ますか?もしそうなら、どのようなエラー? –

+0

'url:" http://192.168.1.108/test/light.json "' - JSONファイルのURLにデータを投稿するだけで、自動的に何かが起こるとは限りません。サーバー側のスクリプトにデータを投稿する必要があります。 PHPファイルの先頭にコードを表示すると、おそらく投稿したいアドレスになります。しかし、ケニーの答えの反対をしたいと思うでしょう.GETを使うと、あなたのスクリプトは_every_リクエストでファイルに書き込むので、すでにページを呼び出すときです。代わりにPOSTを使用して、まずあなたのスクリプトが実際に期待するパラメータが存在するかどうかを確認するために、まずisset/emptyを調べてください。 – CBroe

答えて

1

POSTメソッドを使用してAJAXリクエストを送信しますが、PHPのGETメソッドを使用して取得しようとします。

AJAXメソッドをPOSTからGETに変更するだけで問題を解決できます。

+0

AJAXで "POST"から "GET"に変更しましたが、それでも動作せず、コンソールにエラーが表示されます:http://prntscr.com/eileli – ExPoNe

+0

0

PHPページの代わりにlight.jsonに直接AJAXリクエストを送信しています。さらに、AJAXではtype: "POST"を使用していますが、PHPでは$_GETから読んでいます。

PHPスクリプトが同じページ上にある場合、あなたはあなたのAJAXリクエスト

<?php 
if (isset($_GET['light'])) { 
    $light = $_GET['light']; 
    $file = fopen("light.json", "w") or die("can't open file"); 
    if($light == "on") { 
     fwrite($file, '{"light": "on"}'); 
    } else if ($light == "off") { 
     fwrite($file, '{"light": "off"}'); 
    } 
    echo fread($file, filesize($file)); 
} 
?> 

$.ajax({ 
    type: "GET", 
    data: {"light": "on"}, 
    success: function (data) { 
      alert(data); 
    }, 
    error: function (result) { 
      alert("Error"); 
    } 
    }); 

そうfopen()に正しいパスを指定し、light.jsonが同じディレクトリにあることを確認してくださいにurlを指定する必要はありません。

+0

このエラーはどうなりますか?http://prntscr.com/eileli – ExPoNe

+0

@ExPoNeは、 'tunOn'関数があなたのコードで定義されていないようです。 – DrKey

関連する問題