Home > MooTools > [mootools&PHP] Ajax.Request でファイルの読み書きをする

[mootools&PHP] Ajax.Request でファイルの読み書きをする

Next: 1 2

mootoolsのRequestクラスを使うとXMLHttpRequestが簡単に行えます。
jQueryやprototype.jsもやり方は大体同じです。(クラスの名前からして似てる)
公式サイトのDemoにAjax.Requestのサンプルがいくつかありますが、
送受信だけでは面白くないので、簡単にファイルの読み書きをして掲示板っぽいものを作ってみようー。


直接見る »

▼用意するもの(カッコ内は説明とzipで使ってるサンプルの名前)

  • HTMLファイル(index.html)
    この記事にコピペ用ソースがあります
  • PHPファイル(sample.php)
    <?php ?>が書いてあればいい
  • テキストファイル(data.txt)
    空ファイル。拡張子はなんでもいい
  • mootools ver1.2のコアファイル(mootools.js)
    圧縮したのでもなんでもいい。moreはいらない

※文字コードは全てUTF-8にすること。

Step-by-Step形式で書いています。(全10ステップで2ページ分割)

Step1. XHTMLの作成

まずindex.htmlのヘッダにスクリプトタグとスタータースクリプトを入れておきます。

HTML:
  1. <script type="text/javascript" src="mootools.js"></script>
  2. <script type="text/javascript">
  3. //<![CDATA[
  4. window.addEvent('domready', function(){
  5.  
  6. });
  7. //]]>
  8. </script>

window.addEvent("domready")は、「DOMが読み込み終わったらfunction(){}の内容を実行する」 というメソッドです。

body以下にフォームとログ表示部分を適当に書いて、以下の要素を作ってください。

  1. idがcommentのテキストエリア
  2. idがsubmitのボタン
  3. idがpastlogのブロック要素(DIVなど)

サンプルファイルでは次のようにしました。

index.html

HTML:
  1. <p id="form"><input type="text" id="comment" size="40" /><button id="submit">Send</button></p>
  2. <div id="pastlog"></div>

Form送信はしないのでformタグの有無はどっちでもいい。
valueやnameも動作には必要ないですが、lint先生に怒られるのが気になる場合は入れておいた方がいいかも。
ここでは分かりやすくIDにしていますが、セレクタを使うのもアリです。
CSSのスタイリングはお好みで。

Step2. ボタンイベントとフォームの値の取得

step1で書いたスタータースクリプトに、input#commentの値を取得するソースと、
button#submitを押した時に発生するイベントのソースを追加します。

「ボタン押す→テキストエリアの値を取得する」という流れになるので、
ボタンのinput#submitにaddEvent()でクリックイベントを監視させ、
クリックされたとき実行する関数の中で、input#commentの値を取得するソースを書きます。

index.html

JavaScript:
  1. $("submit").addEvent("click",function(e){
  2. e.stop();
  3. var comment = $("comment").value;
  4. });

Element.valueという書き方はjavascriptの基本のものです。(参考
変数eにはイベントのオブジェクトが入ります。(参考
関数の中にreturn false;かEvent.stop()がないとイベントが止まらずに伝播してしまうので、e.stop();を先頭に書いておきます。

次のように書くと、テキストエリアに入力した内容がdiv#pastlogに表示され、value値が取得されているのが確認できます。

index.html

JavaScript:
  1. $("submit").addEvent("click",function(e){
  2.     e.stop();
  3.     var comment = $("comment").value;
  4.     $("pastlog").set("html",comment);
  5. });

mootools Ajax.Request sample1

Step3. Requestメソッドを追加

本エントリーの主役、Requestクラスの構文は次の通りです。

JavaScript:
  1. var myRequest = new Request([options]);

オプションで重要なものだけ以下に説明を添えます。

  • url (文字列: 初期値=null)
    リクエスト先のURL。
  • method (文字列: 初期値=’post’)
    リクエストのHTTPメソッド。’post’か’get’のどちらか。
  • data (文字列: 初期値=”)
    送信する内容の初期値。データが与えられなかったときに使われます。

イベントはFx等とだいたい同じです。

  • request[onRequest()] リクエストを送った時に発生する
  • complete[onComplete()] リクエストが完了した時に発生する
  • cancel[onCancel()] リクエストがキャンセルされた時
  • success[onSuccess(responseText, responseXML)] リクエストが終了して成功に終わった時。
    1. responseText リクエストから受け取ったテキスト
    2. responseXML リクエストから受け取ったXML
  • failure[onFailure(xhr)] リクエストが失敗したときに発生します(エラーステータスコード)。
    xhr - (XMLHttpRequest) transportインスタンス。

button#submitのクリックイベントで、Requestクラスのインスタンスを作成します。
クリックして直ぐ実行したいのでインスタンスに直接send()を付ける。

index.html

JavaScript:
  1. window.addEvent('domready', function(){
  2.    
  3.     $("submit").addEvent("click",function(e){
  4.         e.stop();
  5.         var comment = $("comment").value;
  6.         new Request({
  7.             url:"sample.php",
  8.             method: 'post',
  9.         data:{"mode":"post","comment":comment},
  10.         onSuccess: function(txt) {
  11.           $("pastlog").set('html',txt);
  12.         },
  13.             onFailure: function() {
  14.                $("pastlog").set('html', 'エラーが発生しました');
  15.             }
  16.       }).send();
  17.     });
  18. });

"data"はHash形式で書いてますが、GETの時と同じ書き方(key=valueを&で繋ぐ)でもいいです。

JavaScript:
  1. data:"mode=post&comment="+comment,

ボタン押して何も表示されなければOK。
ここまで書けばPHPファイルへ送信出来てます。

ここまでの動作の流れをまとめると次のようになります。

  1. button#submitをクリックする
  2. input#commentの値を取得する
  3. Requestクラスのインスタンスを作成する
  4. オプションで指定されたURLへデータを送信する

Step4. PHPでPOSTされたデータを返す

とりあえず、Step2と同じように入力された値を表示するようにPHPファイルを編集してみます。

Step3で書いたソースでは、送信するデータが次のようになっていましたが

JavaScript:
  1. data:{"mode":"post","comment":comment}

これをPHPで表すと

PHP:
  1. $_POST["mode"]="POST";
  2. $_POST["comment"]="入力された値";

になります。オプションのメソッドがGETなら$_GETです。
HTMLフォームから送信したときと同じようにPOST変数やGET変数に格納されます。(» スーパーグローバル変数

なので、sample.phpには次の様に書きます。

PHP:
  1. <?php
  2. if($_POST["mode"] == "post"){
  3.   print $_POST["comment"];
  4. }
  5. ?>

printの行だけでもいいんですが、後の事を考えてif文で「modeがpostの時だけ表示する」という処理にしておきます。
returnではなくprint(またはecho)であることに注意してください。

このレスポンス(printの部分)はRequestのonSuccess()イベントの引数に返されるので、index.htmlで以下のように

JavaScript:
  1. onSuccess: function(txt) {
  2.      $("pastlog").set('html', txt);
  3. }

引数txtをset("html")またはset("text")でdiv#pastlogにセットすれば、
Step3で表示されなかった送信内容が表示されるようになります。

上記ソースを保存して実行してみてください。Step2と同じ結果になればOK。

この記事は複数のページに分かれています1 2

このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加

Comments:0

Comment Form
Remember personal info

Trackbacks:0

Trackback URL for this entry
http://tenderfeel.xsrv.jp/mootools/473/trackback/
Listed below are links to weblogs that reference
[mootools&PHP] Ajax.Request でファイルの読み書きをする from WebTecNote

Home > MooTools > [mootools&PHP] Ajax.Request でファイルの読み書きをする

最近の投稿
最近の修正
  • そしてこのSQLはわれながらよく書いたと思う 2010-11-15
  • CSVの列っていう方がいいのかな…118項目だった 2010-11-15
  • 楽天のCSVの項目が116個もあった衝撃 2010-11-15
  • オフィスで香水臭振りまくのは迷惑だと知れ 2010-11-15
  • ぐあー フレグランステロやー 2010-11-15
  • More updates...

Powered by Twitter Tools

Tag Cloud
おすすめサーバー・他
メタ情報

Return to page top