Ajax-quick-guide

提供:Dev Guides
移動先:案内検索

AJAXとは何ですか?

AJAXは* A synchronous Ja * vaScriptおよび* X * MLの略です。 AJAXは、XML、HTML、CSS、およびJavaスクリプトの助けを借りて、より良く、より速く、よりインタラクティブなWebアプリケーションを作成するための新しい手法です。

  • Ajaxは、コンテンツにXHTMLを、プレゼンテーションにCSSを、ダイナミックコンテンツ表示にDocument Object ModelとJavaScriptを使用します。
  • 従来のWebアプリケーションは、同期リクエストを使用してサーバーとの間で情報を送信します。 これは、フォームに入力し、送信をクリックして、サーバーからの新しい情報を含む新しいページにリダイレクトされることを意味します。
  • AJAXを使用すると、送信を押すと、JavaScriptがサーバーにリクエストを行い、結果を解釈して、現在の画面を更新します。 最も純粋な意味では、ユーザーはサーバーに何かが送信されたことさえ知らないでしょう。
  • 通常、XMLはサーバーデータを受信するための形式として使用されますが、プレーンテキストを含む任意の形式を使用できます。
  • AJAXは、Webサーバーソフトウェアに依存しないWebブラウザーテクノロジーです。
  • クライアントプログラムがバックグラウンドでサーバーに情報を要求している間、ユーザーはアプリケーションを引き続き使用できます。
  • 直感的で自然なユーザーインタラクション。 クリックする必要はありません。マウスを動かすだけでイベントをトリガーできます。
  • ページ駆動ではなくデータ駆動。

リッチインターネットアプリケーションテクノロジー

AJAXは、これまでで最も実行可能なリッチインターネットアプリケーション(RIA)テクノロジーです。 業界では大きな勢いがあり、いくつかのツールキットとフレームワークが登場しています。 しかし同時に、AJAXにはブラウザーの非互換性があり、JavaScriptでサポートされているため、保守やデバッグが困難です。

AJAXはオープンスタンダードに基づいています

AJAXは次のオープンスタンダードに基づいています-

  • HTMLおよびカスケードスタイルシート(CSS)を使用したブラウザベースのプレゼンテーション。
  • データはXML形式で保存され、サーバーから取得されます。
  • ブラウザでXMLHttpRequestオブジェクトを使用して、舞台裏でデータを取得します。
  • すべてを実現するJavaScript。

AJAX-テクノロジー

AJAXは独立して動作できません。 他のテクノロジーと組み合わせて使用​​して、インタラクティブなWebページを作成します。

JavaScript

  • 緩く型付けされたスクリプト言語。
  • JavaScript関数は、ページでイベントが発生すると呼び出されます。
  • AJAX操作全体の接着剤。

DOM

  • 構造化文書にアクセスして操作するためのAPI。
  • XMLおよびHTMLドキュメントの構造を表します。

CSS

  • コンテンツからプレゼンテーションスタイルを明確に分離することができ、JavaScriptによってプログラムで変更できます

XMLHttpRequest

  • サーバーとの非同期相互作用を実行するJavaScriptオブジェクト。

AJAX-例

AJAXを使用する有名なWebアプリケーションのリストを以下に示します。

グーグルマップ

ユーザーは、ボタンをクリックするのではなく、マウスを使用してマップ全体をドラッグできます。

Googleサジェスト

入力中に、Googleは候補を提供します。 矢印キーを使用して結果をナビゲートします。

Gmail

Gmailは、メールをより直感的、効率的、便利に使用できるという考えに基づいて構築されたウェブメールです。

Yahoo Maps(新規)

これで、目的地に行くのがさらに簡単で楽しくなりました!

AJAXと従来のCGIプログラムの違い

これら2つの例を1つずつ試してみると、違いがわかります。 AJAXの例を試してみると、不連続はなく、非常に迅速に応答を受け取りますが、標準のGCIの例を試してみると、応答を待つ必要があり、ページも更新されます。

AJAXの例

  • =

標準的な例

  • =

注意-link:/ajax/ajax_database [AJAXデータベース]に、より複雑な例を示しました。

AJAX-ブラウザのサポート

使用可能なすべてのブラウザーはAJAXをサポートできません。 AJAXをサポートする主要なブラウザのリストを次に示します。

  • Mozilla Firefox 1.0以降。
  • Netscapeバージョン7.1以降。
  • Apple Safari 1.2以降。
  • Microsoft Internet Explorer 5以降。
  • Konqueror。
  • Opera 7.6以降。

次のアプリケーションを作成するときは、AJAXをサポートしていないブラウザーを検討してください。

-ブラウザーがAJAXをサポートしていないという場合、ブラウザーがJavascriptオブジェクト(XMLHttpRequestオブジェクト)の作成をサポートしていないことを意味します。

ブラウザ固有のコードを書く

ソースコードをブラウザと互換性があるようにする最も簡単な方法は、JavaScriptで_try …​ catch_ブロックを使用することです。

<html>
   <body>
      <script language = "javascript" type = "text/javascript">
         <!--
        //Browser Support Code
         function ajaxFunction() {
            var ajaxRequest; //The variable that makes Ajax possible!

            try {
              //Opera 8.0+, Firefox, Safari
               ajaxRequest = new XMLHttpRequest();
            } catch (e) {

              //Internet Explorer Browsers
               try {
                  ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
               } catch (e) {

                  try {
                     ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
                  } catch (e) {

                    //Something went wrong
                     alert("Your browser broke!");
                     return false;
                  }
               }
            }
         }
        //-->
      </script>

      <form name = 'myForm'>
         Name: <input type = 'text' name = 'username'/> <br/>
         Time: <input type = 'text' name = 'time'/>
      </form>

   </body>
</html>

上記のJavaScriptコードでは、XMLHttpRequestオブジェクトを作成するために3回試行します。 私たちの最初の試み-

  • ajaxRequest = new XMLHttpRequest();

Opera 8.0 +、Firefox、およびSafariブラウザー用です。 失敗した場合は、さらに2回、Internet Explorerブラウザ用の正しいオブジェクトを作成してみます-

  • ajaxRequest = new ActiveXObject( "Msxml2.XMLHTTP");
  • ajaxRequest = new ActiveXObject( "Microsoft.XMLHTTP");

動作しない場合は、XMLHttpRequestをサポートしていない非常に古いブラウザーを使用できます。つまり、AJAXをサポートしていません。

ただし、ほとんどの場合、変数ajaxRequestはブラウザーが使用する_XMLHttpRequest_標準に設定され、サーバーへのデータ送信を開始できます。 段階的なAJAXワークフローについては、次の章で説明します。 Ajax-in-action

AJAX-XMLHttpRequest

XMLHttpRequestオブジェクトはAJAXのキーです。 Internet Explorer 5.5が2000年7月にリリースされて以来利用可能ですが、2005年にAJAXとWeb 2.0が普及するまで完全には発見されませんでした。

XMLHttpRequest(XHR)は、JavaScript、JScript、VBScript、およびその他のWebブラウザースクリプト言語で使用できるAPIであり、HTTPを使用してWebサーバーとの間でXMLデータを転送および操作し、Webページのクライアント側とサーバ側。

XMLHttpRequest呼び出しから返されるデータは、多くの場合、バックエンドデータベースによって提供されます。 XMLの他に、XMLHttpRequestを使用して、他の形式のデータを取得できます。 JSONまたはプレーンテキスト。

XMLHttpRequestオブジェクトの作成方法に関するいくつかの例を見てきました。

以下に、慣れる必要のあるメソッドとプロパティの一部を示します。

XMLHttpRequestメソッド

  • アボート() +現在のリクエストをキャンセルします。
  • * getAllResponseHeaders()* + HTTPヘッダーの完全なセットを文字列として返します。
  • * getResponseHeader(headerName)* +指定されたHTTPヘッダーの値を返します。
  • * open(メソッド、URL)*
  • * open(メソッド、URL、非同期)*
  • * open(method、URL、async、userName)*
  • * open(メソッド、URL、非同期、ユーザー名、パスワード)* +リクエストのメソッド、URL、およびその他のオプション属性を指定します。 + methodパラメーターには、「GET」、「POST」、または「HEAD」の値を指定できます。 「PUT」や「DELETE」などのその他のHTTPメソッド(主にRESTアプリケーションで使用される)が可能です。 +「async」パラメータは、リクエストを非同期で処理するかどうかを指定します。 「true」は、スクリプト処理がsend()メソッドの後に応答を待たずに続行することを意味し、「false」は、スクリプトがスクリプト処理を続行する前に応答を待つことを意味します。
  • 送信(コンテンツ) +要求を送信します。
  • * setRequestHeader(label、value)* +送信するHTTPヘッダーにラベル/値のペアを追加します。

XMLHttpRequestプロパティ

  • onreadystatechange +状態が変化するたびに発生するイベントのイベントハンドラー。
  • readyState + readyStateプロパティは、XMLHttpRequestオブジェクトの現在の状態を定義します。 +次の表は、readyStateプロパティの可能な値のリストです-
State Description
0 The request is not initialized.
1 The request has been set up.
2 The request has been sent.
3 The request is in process.
4 The request is completed.
*readyState = 0* XMLHttpRequestオブジェクトを作成した後、open()メソッドを呼び出す前。
*readyState = 1* open()メソッドを呼び出した後、send()を呼び出す前。
*readyState = 2* send()を呼び出した後。
*readyState = 3* ブラウザがサーバーとの通信を確立した後、サーバーが応答を完了する前。
*readyState = 4* 要求が完了し、応答データがサーバーから完全に受信された後。
  • responseText +応答を文字列として返します。
  • responseXML +応答をXMLとして返します。 このプロパティはXMLドキュメントオブジェクトを返します。このオブジェクトは、W3C DOMノードツリーのメソッドとプロパティを使用して調査および解析できます。
  • 状態 +ステータスを数値として返します(例:「Not Found」の場合は404、「OK」の場合は200)。
  • statusText +ステータスを文字列として返します(「Not Found」または「OK」など)。

AJAX-データベース操作

AJAXを使用してデータベースから情報にアクセスするのがいかに簡単かを明確に示すために、MySQLクエリをオンザフライで作成し、結果を「ajaxl」に表示します。 しかし、先に進む前に、基礎作業をしましょう。 次のコマンドを使用してテーブルを作成します。

-次のMySQL操作を実行するのに十分な権限があると想定しています。

CREATE TABLE 'ajax_example' (
   'name' varchar(50) NOT NULL,
   'age' int(11) NOT NULL,
   'sex' varchar(1) NOT NULL,
   'wpm' int(11) NOT NULL,
   PRIMARY KEY  ('name')
)

今、次のSQLステートメントを使用して、このテーブルに次のデータをダンプします-

INSERT INTO 'ajax_example' VALUES ('Jerry', 120, 'm', 20);
INSERT INTO 'ajax_example' VALUES ('Regis', 75, 'm', 44);
INSERT INTO 'ajax_example' VALUES ('Frank', 45, 'm', 87);
INSERT INTO 'ajax_example' VALUES ('Jill', 22, 'f', 72);
INSERT INTO 'ajax_example' VALUES ('Tracy', 27, 'f', 0);
INSERT INTO 'ajax_example' VALUES ('Julie', 35, 'f', 90);

クライアント側のHTMLファイル

次に、クライアント側のHTMLファイル(ajaxl)を作成します。次のコードが含まれます-

<html>
   <body>
      <script language = "javascript" type = "text/javascript">
         <!--
        //Browser Support Code
         function ajaxFunction() {
            var ajaxRequest; //The variable that makes Ajax possible!

            try {
              //Opera 8.0+, Firefox, Safari
               ajaxRequest = new XMLHttpRequest();
            } catch (e) {

              //Internet Explorer Browsers
               try {
                  ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
               } catch (e) {

                  try {
                     ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
                  } catch (e) {
                    //Something went wrong
                     alert("Your browser broke!");
                     return false;
                  }
               }
            }

           //Create a function that will receive data
           //sent from the server and will update
           //div section in the same page.
            ajaxRequest.onreadystatechange = function() {

               if(ajaxRequest.readyState == 4) {
                  var ajaxDisplay = document.getElementById('ajaxDiv');
                  ajaxDisplay.innerHTML = ajaxRequest.responseText;
               }
            }

           //Now get the value from user and pass it to
           //server script.
            var age = document.getElementById('age').value;
            var wpm = document.getElementById('wpm').value;
            var sex = document.getElementById('sex').value;
            var queryString = "?age = " + age ;

            queryString +=  "&wpm = " + wpm + "&sex = " + sex;
            ajaxRequest.open("GET", "ajax-example.php" + queryString, true);
            ajaxRequest.send(null);
         }
        //-->
      </script>

      <form name = 'myForm'>
         Max Age: <input type = 'text' id = 'age'/> <br/>
         Max WPM: <input type = 'text' id = 'wpm'/> <br/>
         Sex:

         <select id = 'sex'>
            <option value = "m">m</option>
            <option value = "f">f</option>
         </select>

         <input type = 'button' onclick = 'ajaxFunction()' value = 'Query MySQL'/>
      </form>

      <div id = 'ajaxDiv'>Your result will display here</div>
   </body>
</html>

-クエリで変数を渡す方法はHTTP標準に従っており、formAがあります。

URL?variable1 = value1;&variable2 = value2;

上記のコードは、以下の画面を表示します-

最大年齢:

最大WPM:

セックス:m f

入力後、このセクションに結果が表示されます。

-これはダミー画面です。

サーバー側のPHPファイル

クライアント側のスクリプトの準備ができました。 次に、データベースから年齢、wpm、性別を取得し、クライアントに送り返すサーバー側スクリプトを作成する必要があります。 次のコードをファイル「ajax-example.php」に追加します。

<?php
$dbhost = "localhost";
$dbuser = "dbusername";
$dbpass = "dbpassword";
$dbname = "dbname";

//Connect to MySQL Server
mysql_connect($dbhost, $dbuser, $dbpass);

//Select Database
mysql_select_db($dbname) or die(mysql_error());

//Retrieve data from Query String
$age = $_GET['age'];
$sex = $_GET['sex'];
$wpm = $_GET['wpm'];

//Escape User Input to help prevent SQL Injection
$age = mysql_real_escape_string($age);
$sex = mysql_real_escape_string($sex);
$wpm = mysql_real_escape_string($wpm);

//build query
$query = "SELECT * FROM ajax_example WHERE sex = '$sex'";

if(is_numeric($age))
   $query .= " AND age <= $age";

if(is_numeric($wpm))
   $query .= " AND wpm <= $wpm";

//Execute query
$qry_result = mysql_query($query) or die(mysql_error());

//Build Result String
$display_string = "<table>";
$display_string .= "<tr>";
$display_string .= "<th>Name</th>";
$display_string .= "<th>Age</th>";
$display_string .= "<th>Sex</th>";
$display_string .= "<th>WPM</th>";
$display_string .= "</tr>";

//Insert a new row in the table for each person returned
while($row = mysql_fetch_array($qry_result)) {
   $display_string .= "<tr>";
   $display_string .= "<td>$row[name]</td>";
   $display_string .= "<td>$row[age]</td>";
   $display_string .= "<td>$row[sex]</td>";
   $display_string .= "<td>$row[wpm]</td>";
   $display_string .= "</tr>";
}

echo "Query: " . $query . "<br/>";
$display_string .= "</table>";

echo $display_string;
?>

次に、_Max Age_またはその他のボックスに有効な値(120など)を入力して、[MySQLのクエリ]ボタンをクリックします。

最大年齢:

最大WPM:

セックス:m f

入力後、このセクションに結果が表示されます。

このレッスンを正常に完了すると、MySQL、PHP、HTML、およびJavascriptを使用してAJAXアプリケーションを作成する方法がわかります。 Ajax-security

AJAX-現在の問題

AJAXは非常に急速に成長しているため、AJAXには多くの問題が含まれています。 時間の経過とともに、それらが解決され、AJAXがWebアプリケーションに理想的になることを願っています。 AJAXが現在苦しんでいるいくつかの問題をリストアップしています。

複雑さが増す

  • サーバー側の開発者は、HTMLクライアントページおよびサーバー側のロジックでプレゼンテーションロジックが必要になることを理解する必要があります。
  • ページ開発者にはJavaScriptテクノロジーのスキルが必要です。
  • AJAXベースのアプリケーションは、デバッグ、テスト、および保守が難しい場合があります*
  • JavaScriptのテストは困難です-自動テストは困難です。
  • JavaScriptのモジュール性が弱い。
  • まだ設計パターンやベストプラクティスのガイドラインがありません。

ツールキット/フレームワークはまだ成熟していません

  • それらのほとんどはベータ段階です。
  • XMLHttpRequestの標準化はまだありません*
  • IEの将来のバージョンではこれに対処します。

古いブラウザではXMLHttpRequestはサポートされていません

  • iframeが役立ちます。
  • JavaScriptテクノロジーの依存性と非互換性*
  • アプリケーションが機能するには有効にする必要があります。
  • まだいくつかのブラウザーの非互換性が存在します。
  • JavaScriptコードはハッカーに表示されます*
  • 設計が不十分なJavaScriptコードは、セキュリティの問題を引き起こす可能性があります。