2016-03-29 17 views
0

今私はテキストファイルからその内容を取得するHTMLテキストエリアを持っています。私ができるようにしたいのは、ユーザーがテキストエリア内のファイルを編集できるようにすることです。ボタンを押すと、ページ全体をリロードせずに変更がファイルにプッシュされます。リロードせずにファイルに変更を保存するPage

これはクライアントサイドの言語なので、javascriptだけではできないことを理解していますが、これはどういうわけかAJAXで行うことができますか?私はAJAXに多くの経験がないので、うまくいかないかもしれません。

私がやらなければならないことを簡単にするために、私はウェブソケットから遠ざかりたいと思っています。以下は

は私のPHPのテキストエリアコードです:

<?php 
    $myfile = fopen($file, 'a+'); 

    echo "<textarea id='demo'>"; 
    // go through each line in the file, print its contents. 
    while(!feof($myfile)) { 
      echo fgets($myfile); 
    } 
      echo "</textarea>"; 
?> 
+1

もちろん、「保存」ボタンのクリックイベントにハンドラを付加するだけで、テキストエリアの値を受け取り、サーバーにajaxリクエストを送信するだけです。そこにペイロードを受け取り、それを保存する "保存"スクリプトがあります(たぶんPHPなどで)。 – arkascha

+0

@arkaschaさて、私はそれを調べて試してみます。ありがとうございました – l00kitsjake

答えて

0

ページ全体を更新せずに、jquery ajaxを使ってテキストエリアを更新することができます。 index.php(私の例ではここ)のsave changesをクリックすると、テキストエリアの値がid="demo"で取得され、update.phpが送信されます。 update.phpでは、fwrite()を使用して既存のテキストをすべて消去し、textareaから取得した新しいコンテンツを書き込んで、index.phpのように新しいテキストを表示します。

だから、これはindex.php次のとおりです。

<!DOCTYPE HTML> 
    <html> 
     <head> 
      <title>TextArea Lesson</title> 
      <style> 
       div{ 
        margin:0 auto 0; 
        width:400px; 
        height:300px; 
       } 
       #demo{ 
        margin-left:5px; 
        width:390px; 
        height:200px;    
       } 
      </style>  
     </head> 
     <body> 
      <div> 
      <form method="POST"> 
       <fieldset> 
        <legend>Ajax Update Text Area</legend> 
     <?php 
      $myfile = fopen('test.txt', 'r'); 
       echo "<textarea id='demo'>"; 
      // go through each line in the file, print its contents. 
      while(!feof($myfile)) { 
       echo fgets($myfile); 
      } 
       echo "</textarea><br>"; 
     ?> 
        <input type="submit" id="save" value="Save changes" /> 
       </fieldset> 
      </form> 
      </div> 
     </body> 
    </html> 
    <script src="https://code.jquery.com/jquery-1.12.2.min.js" 
        integrity="sha256-lZFHibXzMHo3GGeehn1hudTAP3Sc0uKXBXAzHX1sjtk=" 
        crossorigin="anonymous"></script> 
    <script> 
    //when you click save changes, we get its id="save" 
    //and prevent default submission  
    $(document).on("click", "#save", function(e){ 
      e.preventDefault(); 
      //get the textarea data bu its id="demo" 
      var textdata = $('#demo').val(); 
      mydata= 'testdata='+textdata; 
      $.ajax({ 
       type:'POST', 
       data:mydata, 
       url:'update.php', 
       success:function(data) {     
        if(data){ 
         alert('Saved!'); 
         $("#demo").html(data);//load data from update.php 
        }else{ 
         alert('Update failed'); 
        } 
        } 
      }); 
     }); 
    </script> 

Update.php

<?php 
$data_to_write = $_POST['testdata']; 
$file_path = 'test.txt'; 
$file_handle = fopen($file_path, 'w'); 
fwrite($file_handle, $data_to_write); 
fclose($file_handle); 
$myfile = fopen('test.txt', 'r'); 
while(!feof($myfile)) { 
      echo fgets($myfile); 
    } 
fclose($myfile); 
?> 

そしてtest.txt

大きな速い茶色の黒いキツネは、のろまなイヌに飛びかかりました。

これがあなたに役立つことを願っています。注:これは単なる実用的なコードであり、学習目的のみです。したがって、セキュリティチェックとデータ検証は保証されません。

+0

update.phpをuniversal(ハードコード 'test.txt'ではない)にしたいのですが、index.phpに変数があり、$ fileにファイルパスが含まれています。私はその変数をajaxでも渡しますか? – l00kitsjake

+1

はい、もちろん可能です。 '$ file_path = $ _ POST ['filepath'];' filepath = 'ファイルパス'; 'filepath = '+ファイルパス';' –

0

さて、あなたはそれを行うための簡単な方法のカップルを持っています。

  1. あなたは隠しiframeを持つことができます。 人が送信フォームをクリックすると、フィールドの値をとる関数を呼び出して、隠しフレームのフォームに送信し、JavaScriptを使用してフォームを送信します。
  2. XMLHttpRequest()を使用できます。 渡されたデータを取得するPHPページを作成します。 XMLHttpRequest()を使用してページを呼び出します。フォームからデータを送信します。

方法2はよりエレガントです。

関連する問題