2016-06-18 26 views
0

jsonファイルにデータを追加する方法について多くの記事が赤く表示されています。私はそれをまとめて自分の状況に使用しようとしましたが、動作しません。基本的に私は、javascriptを使ってhtmlファイルからデータを取得し、XMLHttpリクエストを使用してそのデータをphpファイルに送信し、PHPファイルから.jsonファイルにデータを追加しようとしています。 Anywho、それはそれを追加していないと私はなぜ、どこに問題があるのか​​分からない。 私の質問はXMLHttpリクエストについてです。それが正しいか?何故なの? PHPファイルについては 。問題がXMLHttpリクエストにある場合、phpファイルは.jsonファイルにデータを追加しますか?私はjsonファイルで何かを取得しようとしているだけなので、実行可能にするアルゴリズムについて考え始めることができます。 XMLHttpリクエストは私にとってはかなり新しいものです。理解のために、ここに私のコードは次のとおりです。jsonファイルにデータを追加しない

のindex.html:

<!DOCTYPE html> 

<html> 
    <head> 
     <title>Project</title> 
     <meta charset="UTF-8"> 
     <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
     <link href="css/style_mob.css" type="text/css" rel="stylesheet"> 
     <script src="script/jquery.js"></script> 
     <script src="script/sendData.js"></script> 
    </head> 
    <body> 
     <div id="top"> 
      <h1>Click only in case of an emergency!</h1> 
     </div> 
     <div id="divButtons"> 
      <button class="button" id="polizei">Polizei</button> 
      <button class="button" id="feuerwehr">Feuerwehr</button> 
      <button class="button" id="krankenwagen">Krankenwagen</button> 
     </div> 
    </body> 
</html> 

sendData.js:

$(document).ready(function() { 
    var type; 
    var latitude; 
    var longitude; 
    var currentdate = new Date(); 
    $(".button").click(function(){ 
     type = $(this).attr("id");   

     var dateTime = "Date: " + currentdate.getDay() + "/"+(currentdate.getMonth()+1) 
      + "/" + currentdate.getFullYear() + " time - " 
      + currentdate.getHours() + ":" 
      + currentdate.getMinutes(); 

     if (navigator.geolocation) { 
      navigator.geolocation.getCurrentPosition(sendData); 
     } else { 
      alert("Geolocation is not supported by this browser."); 
     } 
     function sendData(position) { 
      latitude = position.coords.latitude; 
      longitude = position.coords.longitude;   
     } 
     var hr = new XMLHttpRequest(); 
     hr.open("POST", "emergencyData.php", true); 
     hr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
     alert("about to send data to php file"); 
     hr.send("type="+type+"&latitude="+latitude+"&longitude="+longitude+"$dateTime="+currentdate+""); 
    }); 


}); 

emergencyData.php:

<?php 
    header("Content-Type: application/json"); 
    $type = $_POST["type"]; 
    $latit = $_POST["latitude"]; 
    $longit = $_POST["longitude"]; 
    $dateTime = $_POST["dateTime"]; 
    echo $type; 
    // Loading existing data: 
    $json = file_get_contents("emergencyData.json"); 
    $data = json_decode($json, true); 

    // Adding new data: 
    $data[0] = array('type' => $type, 'latitude' => $latit, 'longitude' => $longit, 'date' => $dateTime); 

    // Writing modified data: 
    file_put_contents('emergencyData.json', json_encode($data, JSON_FORCE_OBJECT)); 
?> 
+0

これは、Chromeの開発ツールの[ネットワーク]タブを使用してデバッグを開始できます。適切なリクエストがサーバーに送信されているかどうかを確認し、適切なものが応答として返送されているかどうかを確認します。 AJAXリクエスト(xmlhttp ...)が正しく動作することを確認したら、PHPロジックのデバッグを開始できます。現在のところ、新しいデータを追加していないように見えますが、データは常に0番目のインデックスに設定されています。だから、PHPの配列にデータを追加する方法を見てください。また、jQueryを使用している限り、XMLHttpRequestの代わりに$ .AJAXを使用する必要があります。それはより簡単です。 –

+0

ウェブサーバーをセットアップしているのですか、これをローカルで実行しようとしていますか? –

+0

はい、私は言及するのを忘れました。私は無料のオンラインWebサーバーでこれを試しています。 – Oskars

答えて

0

あなたがでタイプミスを持っていますjavascript。

hr.send("type="+type+"&latitude="+latitude+"&longitude="+longitude+"$dateTime="+currentdate+""); 

あなたはまた、私はあなたが&dateTime="+currentdate+""&dateTime="+dateTimeになりたかったと思う&

あるべきdateTime$を持っています。追加+""は不要です。あなたはPHPスクリプトを使用して、新しいデータを追加する代わりに、古いデータを上書き保存しておきたい場合は

そして最後は、:

$data[] = array('type' => $type, 'latitude' => $latit, 'longitude' => $longit, 'date' => $dateTime); 

をそれ以外の場合は毎回、古いJSONデータを新しいものに置き換えられてしまいます。

+0

私はあなたが提案したものすべてを変更しました。これは、イムは、Firefoxにコンソールで取得するものである:1. 'POST XHR ます。http:// projectforuni.byethost32.com/emergencyData.php' 2.' GET XHR http://parked-domain.org/ ' 3. 'クロスオリジン要求がブロックされました:同じオリジンポリシーはhttp://parked-domain.org/のリモートリソースの読み取りを許可しません。 (理由:CORSヘッダ 'Access-Control-Allow-Origin'がありません)。 – Oskars

+0

'http:// projectforuni.byethost32.com/emergencyData.php'が' http://parked-domain.org 'にリダイレクトされています/ 'これはあなたがそのエラーを受けている理由です。なぜリダイレクトされますか?あなたはそれについてあなたのホストに尋ねなければならないでしょう。 – TheDrot

+0

ありがとう、私は自分のwampサーバーをセットアップして、誤解はなく、うまくいきます!ありがとうございました。 – Oskars

関連する問題