Mohawk / Ajaxの使用

この記事では、MohawkでAjaxを操作する方法について説明します。

Ajaxの操作は、カーネル/ Ajax.jsファイルにあるAjaxクラスを通じて実装されます。



Ajaxクラスは、基本的なルーチン操作を処理します。

-XmlHttpRequestリクエストの作成

-要求データ内の特殊文字の変換

-サーバーへのリクエストの作成と送信

-サーバーからの応答を受け入れる





より便利な作業のために、クラスも使用されます:

-XML-XMLでの作業を容易にします

-FormsInterface-HTMLフォームを操作するため。



フォームとFormsInterface



簡単なHTMLフォームを作成してみましょう。 たとえば、これをフィードバックフォームとします。

< form id ="feedback" method ="post" onsubmit ="return send(this)" >

< fieldset >

< ul >

< li >

< label for ="name" > Name: </ label >

< input id ="name" name ="name" />

</ li >

< li >

< label for ="email" > Email: </ label >

< input id ="email" name ="email" />

</ li >

< li >

< label for ="message" > Message: </ label >

< textarea id ="message" name ="message" cols ="40" rows ="8" ></ textarea >

</ li >

</ ul >

< button type ="submit" > Submit </ button >

</ fieldset >

</ form >




* This source code was highlighted with Source Code Highlighter .








onsubmitイベントでは、フォームはsend関数を呼び出し、引数として自身への参照を渡します。 送信機能では、動作します。 まず、フォームからデータを取得する必要があります。 DOM拡張FormsInterfaceは、フォームからデータを取得するための便利なメソッド:formを提供します。 getData ()、ここでformはフォーム自体です。 getData ()メソッドは、フォームからデータを連想配列として返します。

function send(form) {

var data = form.getData();

// data = {'name': 'Alice', 'email': 'alice@example.com', message: 'Hello world!'}



return false ;

}




* This source code was highlighted with Source Code Highlighter .








AjaxとXML



Ajaxクラスを使用するには、接続する必要があります。

include( 'mohawk.kernel.Ajax' );



* This source code was highlighted with Source Code Highlighter .








フォームデータを送信するには、Ajaxリクエストを作成する必要があります。

var request = new Ajax( 'test.xml' , Ajax.METHOD_POST);



* This source code was highlighted with Source Code Highlighter .








Ajaxクラスのコンストラクターは引数を取ります。リクエストが送信されるアドレスとHTTPメソッドです。 メソッドが指定されていない場合、リクエストはGETメソッドによって送信されます。 クラスを通じて、通常のGETおよびPOSTリクエストだけでなく、PUT、DELETE、HEAD、OPTIONSも送信できます。 後者の場合、対応するX-Request-Methodヘッダーを送信して、POSTを介してリクエストをエミュレートすることができます。 つまり、たとえば、PUTリクエストはPOST経由で送信されますが、ヘッダーはX-Request-Method:PUTになります。 これは、何らかの理由でGETおよびPOST以外の要求を送信できない場合に必要です(たとえば、KerioファイアウォールはHTTP DELETEメソッドをブロックします)。



したがって、リクエストを送信するには、 request.send (data)メソッドを呼び出す必要があります。このメソッドは、送信されたデータを連想配列として引数として受け取ります。 例:

request.send({ 'a' : 1, 'b' : 2}); // a=1&b=2





* This source code was highlighted with Source Code Highlighter .








ajaxリクエストを送信関数に追加します。

function send(form) {

var request = new Ajax( 'test.xml' , Ajax.METHOD_POST);

var data = form.getData();

request.send(data);

return false ;

}




* This source code was highlighted with Source Code Highlighter .








send ()関数が呼び出されると、フォームデータがサーバーに送信されます。 ただし、サーバーがこのデータを正常に受信したことを確認する必要があり、より複雑なアプリケーションでは、サーバーからの応答を受け入れる必要もあります。 これを行うには、サーバーから応答を受信したときに呼び出されるハンドラー関数を定義します。 ハンドラーはrequest.responseHandlerプロパティを介して設定されます。

function send(form) {

var request = new Ajax( 'test.xml' , Ajax.METHOD_POST);

request.responseHandler = function (request) {

alert( 'Tada!' );

}

var data = form.getData();

request.send(data);

return false ;

}




* This source code was highlighted with Source Code Highlighter .








test.xmlファイルを作成して、サーバーをエミュレートします。 サーバーがすべてがうまくいったことを私たちに伝え、メッセージDoneを表示するとします:

<? xml version ="1.0" encoding ="UTF-8" ? >

< data >

< status > ok </ status >

< message > Done </ message >

</ data >




* This source code was highlighted with Source Code Highlighter .








フォームをテストすると、送信後にアラートボックス「Tada!」が発行されます。

ハンドラーを複雑にしましょう。 サーバーの応答、つまりステータスとメッセージを取得したいのです。 設定したrequest.responseHandler関数では、引数にajaxリクエストへのリンクrequestが渡されます。 サーバー応答を受信した後、要求オブジェクトにはrequest.dataプロパティがあり、サーバーからのデータが含まれます。 XMLオブジェクトは自動的にXML応答を解析し、その結果、 request.dataにはサーバー応答の連想配列があります:{'status': 'ok'、 'message': 'Done!'}

function send(form) {

var request = new Ajax( 'test.xml' , Ajax.METHOD_POST);

request.responseHandler = function (request) {

var response = request.data;

alert( 'Status: ' + response.status + ', message: ' + response.message);

}

var data = form.getData();

request.send(data);

return false ;

}




* This source code was highlighted with Source Code Highlighter .








ジョンソン



多くの開発者はXMLよりもJSONを好みます。 たとえば、サーバーの応答は次の形式( test.js )になります。

{

status: 'ok' ,

message: 'Done!'

}





* This source code was highlighted with Source Code Highlighter .








JSONデータを受け入れるには、次の2行のみを変更する必要があります。

function send(form) {

// test.xml test.js

var request = new Ajax( 'test.js' , Ajax.METHOD_POST);



// - 'json'

request.type = Ajax.TYPE_JSON;



request.responseHandler = function (request) {

alert( 'Tada!' );

}

var data = form.getData();

request.send(data);

return false ;

}




* This source code was highlighted with Source Code Highlighter .








例からわかるように、Ajaxクラスを使用すると、送受信されるデータの形式から完全に抽象化できます。 アプリケーションのロジックを変更せずにXMLとJSONを使用できます。



Ajaxリクエストのデバッグ



Ajaxを使用してアプリケーションを開発する場合、クエリをデバッグする必要がよくあります。 何がどこに行き、そこから何が来たかを見る必要があります。 Firefoxにはこれらの目的のためのすばらしいファイアウォールがあり、OperaにはWeb開発者向けの組み込みコンソールがあります。 Chrome 2のベータ版はAjaxリクエストを表示できるようです。 しかし、IEでは、通常どおり、デバッグで問題が発生します。



Mohawkデバッグコンソールを使用して、Ajaxがサーバーから送信したリクエストとレスポンスを確認できます。 コンソールは非常に簡単に接続されます:

include( 'mohawk.UI.Console' );



var Console = new Mohawk.UI.Console();

Console.regKey();

document .addLoader( function () {

Console.append();

});




* This source code was highlighted with Source Code Highlighter .








コンソールログの例:

Ajax query sent to: test.xml

Data:

name:Alice

email:alice@emaxmple.cmo

message:Hello world!

Query: name=Alice&email=alice@emaxmple.cmo&message=Hello world!



Ajax query received from: test.xml

Data:

<?xml version="1.0" encoding="UTF-8"?>

<data>

<status>ok</status>

<message>Done</message>

</data>









コンソール操作とサンプルフォームを表示する

例付きのMohawkをダウンロードする

Mohawkの紹介JSテンプレートについても読むことができます。



All Articles