2017-03-15 20 views
-1

自分のコンピュータにランダムな.jsonファイルを読み込むことができるPHPプログラムを作成しました。表示するファイルを選択すると、選択した.jsonファイルからデータが取得されます。最初は、変数に置き換えられたデフォルトのファイルを使用しました。ここではPHPのコードは次のとおりです。これは私が下記のjavascriptの例の前に何をしたかである.jsonファイルを変数javacriptにロードする

$json_file = file_get_contents($_REQUEST["filename"]); 

$jfo = json_decode($json_file, true); 

<?php 

$uploaddir = 'uploads/'; 

$uploadfile = $uploaddir . basename($_FILES['file']['name']); 
$file_test = explode('.', $_FILES['file']['name']); 
$file_ext= strtolower(end($file_test)); 

$expensions = array(".json"); 

     if(in_array($file_ext,$expensions)=== false){ 
      $errors[]="extension not allowed, please choose a DBC or an XML file."; 
     } 

if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile)) { 
    echo "<div style='font-size: 150%;'>". "File is valid, and was successfully uploaded.\n"."</div>"; 

} else { 
    echo "<div style='font-size: 150%;'>". "Oops, It seems you haven't uploaded a file ! Please make sure you have selected a .json file\n "."</div> <br>"; 
    echo "<div style='font-size: 150%;'>". "Returning to Home...\n "."</div>"; 
    header("Refresh: 3,URL=upload_file.php"); 
    exit(); 
} 

echo basename($_FILES['file']['name']); 

?> 

<?php 

header("Refresh: 2,URL=json_content_extended.php?filename=".$uploadfile); 
exit(); 

?> 

別のファイルには、私が要求された値を宣言したコードが含まれています。上記の例をjavascriptに再作成してデフォルトの.jsonファイルをロードしたところ

私はファイル名を手動で入力しましたが、変更したいファイルをロードしたいと思います。

$(document).ready(function() { 
    $.getJSON("file.json", function(json) { 
     var tr; 
     for (var i = 0; i < json.messages.length; i++) { 
      var details = json.messages[i]; 
      for (var j = 0; j <= details.signals.length; j++) { 
       tr = $('<tr/>'); 
       tr.append("<td>" + details.signals[j].start_bit + "</td>"); 
       tr.append("<td>" + details.signals[j].comment + "</td>"); 
       tr.append("<td>" + details.signals[j].bit_length + "</td>"); 
       tr.append("<td>" + details.signals[j].factor + "</td>"); 
       tr.append("<td>" + details.signals[j].offset + "</td>"); 
       tr.append("<td>" + details.signals[j].is_big_endian + "</td>"); 
       tr.append("<td>" + details.signals[j].is_signed + "</td>"); 
       tr.append("<td>" + details.signals[j].name + "</td>"); 
       $('#table_1').append(tr); 
      } 
     } 
    }); 
}); 

上記の例では、私のjavascriptファイルの一部です: はここに私のコードです。 これは私が得る出力されます:

Output

絵があなたにfile.jsonの内容を示しています。どういうわけか、ファイル名の代わりに変数を設定する可能性があるのだろうかと思います。私はPHPの例と同じことをしたいと思いますが、今回はJavaScriptで行います。

+0

なぜそうではありませんか?そこに変数を入れてみましたか? – Quentin

+0

はい、私はそれを行った、それは動作しません – georges619

+1

私は[mcve]ので、私たちはそれが動作しなかった理由を示すことができます私たちを示しています。 – Quentin

答えて

0

はい、それは可能である:

$(document).ready(function() { 
    var filename = 'file.json'; 
    $.getJSON(filename, function(json) { 
     var tr; 
     for (var i = 0; i < json.messages.length; i++) { 
      var details = json.messages[i]; 
      for (var j = 0; j <= details.signals.length; j++) { 
       tr = $('<tr/>'); 
       tr.append("<td>" + details.signals[j].start_bit + "</td>"); 
       tr.append("<td>" + details.signals[j].comment + "</td>"); 
       tr.append("<td>" + details.signals[j].bit_length + "</td>"); 
       tr.append("<td>" + details.signals[j].factor + "</td>"); 
       tr.append("<td>" + details.signals[j].offset + "</td>"); 
       tr.append("<td>" + details.signals[j].is_big_endian + "</td>"); 
       tr.append("<td>" + details.signals[j].is_signed + "</td>"); 
       tr.append("<td>" + details.signals[j].name + "</td>"); 
       $('#table_1').append(tr); 
      } 
     } 
    }); 
}); 

ユーザーがファイル名を入力します:

$(document).ready(function() { 
    var filename = prompt("The file name of the JSON file to load:") 
    $.getJSON(filename, function(json) { 
     var tr; 
     for (var i = 0; i < json.messages.length; i++) { 
      var details = json.messages[i]; 
      for (var j = 0; j <= details.signals.length; j++) { 
       tr = $('<tr/>'); 
       tr.append("<td>" + details.signals[j].start_bit + "</td>"); 
       tr.append("<td>" + details.signals[j].comment + "</td>"); 
       tr.append("<td>" + details.signals[j].bit_length + "</td>"); 
       tr.append("<td>" + details.signals[j].factor + "</td>"); 
       tr.append("<td>" + details.signals[j].offset + "</td>"); 
       tr.append("<td>" + details.signals[j].is_big_endian + "</td>"); 
       tr.append("<td>" + details.signals[j].is_signed + "</td>"); 
       tr.append("<td>" + details.signals[j].name + "</td>"); 
       $('#table_1').append(tr); 
      } 
     } 
    }); 
}); 
+1

良い答えですが、$ .getJSON()関数を起動する前にユーザーからファイル名を取得する方が良い方法でしょう。答えは+1。 –

+1

それから、最善のことはモーダルを作り出すことです。そのモーダルには、ユーザーがファイル名を入力するフォームがあります。フォームを送信するときは、フォームのデフォルトの動作を防ぎ、ファイル名をパラメータとして上記の計算を行う関数を呼び出します。 –

+0

それは素晴らしいでしょう。そうでない場合でも、以下の別の答えでは、JavaScriptのprompt()メソッドを使用しても動作します。 –

-2
var filename= 'file.json'; 

$.getJSON(filename, function(json) {}); 
+1

このコードスニペットは問題を解決するかもしれませんが、[説明を含む](http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)は本当にあなたの投稿の質を向上させるのに役立ちます。将来読者の質問に答えていることを覚えておいてください。そうした人々はあなたのコード提案の理由を知らないかもしれません。 – DimaSan

-1

はい。

const filename = prompt("The file name of the JSON file to load:") 
$(document).ready(function() { 
$.getJSON("file.json", function(json) { 

優れたユーザー・インターフェースは、テキスト入力と関連し、ボタンのクリックに代わりの$(document).readyにあなたの無名関数を結合してHTMLフォームを持っているだろう:あなたはへの最初の3行を変更することができます。フォームには、サーバーにリクエストを送信するためのフォームは表示されません。 $.getJSONはサーバーからJSONファイルをダウンロードします。

-1

ファイル名に変数を作成するにはJavaScriptで、あなたの好みの言語でその変数をロードし、それを使用してください:

$(document).ready(function() { 
    var myFile = 'mydynamicfile.json'; 
    $.getJSON(myFile, function(json) { 
     var tr; 
     for (var i = 0; i < json.messages.length; i++) { 
      var details = json.messages[i]; 
      for (var j = 0; j <= details.signals.length; j++) { 
       tr = $('<tr/>'); 
       tr.append("<td>" + details.signals[j].start_bit + "</td>"); 
       tr.append("<td>" + details.signals[j].comment + "</td>"); 
       tr.append("<td>" + details.signals[j].bit_length + "</td>"); 
       tr.append("<td>" + details.signals[j].factor + "</td>"); 
       tr.append("<td>" + details.signals[j].offset + "</td>"); 
       tr.append("<td>" + details.signals[j].is_big_endian + "</td>"); 
       tr.append("<td>" + details.signals[j].is_signed + "</td>"); 
       tr.append("<td>" + details.signals[j].name + "</td>"); 
       $('#table_1').append(tr); 
      } 
     } 
    }); 
}); 
関連する問題