AJAX は、間違いなく 2005 年に最も注目されている Web 開発テクノロジーの 1 つです。もちろん、この功績は Google から切り離すことはできません。私は普通の開発者であり、AJAX をあまり使用しませんが、AJAX の使用経験を簡単に共有します。 (この記事は、ユーザーが JavaScript、HTML、CSS などの基本的な Web 開発能力をすでに持っていることを前提としています)
[AJAX の概要]
Ajax は、クライアント側のスクリプトを使用して Web サーバーとデータを交換する Web アプリケーション開発方法です。 Web ページは、再調整する対話プロセスを中断することなく動的に更新できます。 Ajax を使用すると、ユーザーはネイティブ デスクトップ アプリケーションに近い、直接的で可用性が高く、よりリッチで動的な Web ユーザー インターフェイスを作成できます。
Asynchronous JavaScript and XML (AJAX) は新しいテクノロジーではありませんが、Cascading Style Sheets (CSS)、JavaScript、XHTML、XML、Extensible Style Language Transformation (XSLT) などのいくつかの既存のテクノロジーを使用して開発されました。デスクトップ ソフトウェアのように動作します。
[AJAX 実行原理]
Ajax インタラクションは、XMLHttpRequest と呼ばれる JavaScript オブジェクトから始まります。名前が示すように、クライアント側スクリプトが HTTP リクエストを実行できるようにし、XML 形式のサーバー応答を解析します。 Ajax 処理の最初のステップは、XMLHttpRequest インスタンスを作成することです。 HTTP メソッド (GET または POST) を使用してリクエストを処理し、ターゲット URL を XMLHttpRequest オブジェクトに設定します。
HTTP リクエストを送信するとき、ブラウザがハングしてサーバーからの応答を待つのではなく、ページを介してユーザーのインターフェース操作に応答し続け、ユーザーが応答したらサーバーの応答を処理する必要があります。実際に到着します。これを実現するには、XMLHttpRequest にコールバック関数を登録し、XMLHttpRequest リクエストを非同期にディスパッチします。制御はすぐにブラウザに返され、サーバーの応答が到着するとコールバック関数が呼び出されます。
[AJAX の実践]
1. Ajax を初期化します
Ajax は実際に XMLHttpRequest オブジェクトを呼び出すので、最初にこのオブジェクトを呼び出す必要があります。
/** * 初始化一个xmlhttp对象 */ function InitAjax() { var ajax=false; try { ajax = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { ajax = new ActiveXObject("Microsoft.XMLHTTP"); } catch (E) { ajax = false; } } if (!ajax && typeof XMLHttpRequest!='undefined') { ajax = new XMLHttpRequest(); } return ajax; } |
このコードは XMLHTTP コンポーネントを呼び出しているため、IE ブラウザでのみ使用できると思われるかもしれません。いいえ、テストした結果、Firefox も使用できるようになりました。
Ajax 操作を実行する前に、まず InitAjax() 関数を呼び出して Ajax オブジェクトをインスタンス化する必要があります。
2. Get メソッドを使用します
最初のステップは、Get リクエストを実行し、/show.php?id=1 を取得するために必要なデータを追加することです。では、何をすべきでしょうか?
次のリンクがあるとします: ニュース 1 リンクをクリックすると、リンクなしで表示できます。リンクされたコンテンツを更新するにはどうすればよいでしょうか?
//リンクを次のように変更します:
//そしてニュースを受信するレイヤーを設定し、表示しないように設定します: 同時に、対応する JavaScript 関数を構築します:function getNews(newsID) { //パラメータ newsID が渡されない場合if (typeof(newsID) == 'unknown') {Return false; }//Ajax を必要とする URL アドレス
|
//フォームの構築にはアクションやメソッドなどの属性は必要ありません。すべて ajax によって行われます。 // 返される情報を受け入れるレイヤーを構築します: <🎜> |
function saveUserInfo() { //获取接受返回信息层 var msg = document.getElementById("msg"); //获取表单对象和用户信息值 var f = document.user_info; var userName = f.user_name.value; var userAge = f.user_age.value; var userSex = f.user_sex.value; //接收表单的URL地址 var url = "/save_info.php"; //需要POST的值,把每个变量都通过&来联接 var postStr = "user_name="+ userName +"&user_age="+ userAge +"&user_sex="+ userSex; //实例化Ajax var ajax = InitAjax(); //通过Post方式打开连接 ajax.open("POST", url, true); //定义传输的文件HTTP头信息 ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); //发送POST数据 ajax.send(postStr); //获取执行状态 ajax.onreadystatechange = function() { //如果执行状态成功,那么就把返回信息写到指定的层里 if (ajax.readyState == 4 && ajax.status == 200) { msg.innerHTML = ajax.responseText; } } } |
POST メソッドを使用するプロセスは大まかに次のとおりです。もちろん、実際の開発状況はさらに複雑になる可能性があるため、開発者はゆっくり考える必要があります。
4. 非同期コールバック (擬似 Ajax メソッド)
通常の状況では、Get メソッドと Post メソッドで Ajax を使用して現在の問題を解決できますが、アプリケーションの複雑さには制限があります。もちろん、開発中に Ajax が使用できない場合があるかもしれませんが、シミュレーションする必要があります。 Ajax の効果があれば、擬似 Ajax を使用してニーズを実現できます。
擬似 Ajax の一般原則は、通常のフォームまたはその他のものを送信しますが、送信された値の対象をフローティング フレームに設定するため、ページは更新されません。もちろん、次のことを確認する必要があります。 JavaScript を使用して、実行結果に関するプロンプト情報をシミュレートできますが、これは現実ではないため、実行結果がどのようなものかを示すために、実行結果を非同期でコールバックする必要があります。
要件が写真をアップロードすることであり、アップロード後の写真のステータス (アップロードが成功したかどうか、ファイル形式が正しいかどうか、ファイル サイズが正しいかどうかなど) を知る必要があるとします。次に、Ajax 呼び出しのプロセスを正常にシミュレートできるように、ターゲット ウィンドウが実行結果をウィンドウに返す必要があります。
次のコードは少し長く、Smarty テンプレート テクノロジに関連しています。詳しくない場合は、関連する技術情報を読んでください。
ファイルをアップロード: Upload.html
//上传表单,指定target属性为浮动框架iframe1 //显示提示信息的层 //用来做目标窗口的浮动框架 |
アップロードされた PHP ファイルを処理します:upload.php
/* 定义常量 */ //定义允许上传的MIME格式 define("UPLOAD_IMAGE_MIME", "image/pjpeg,image/jpg,image/jpeg,image/gif,image/x-png,image/png"); //图片允许大小,字节 define("UPLOAD_IMAGE_SIZE", 102400); //图片大小用KB为单位来表示 define("UPLOAD_IMAGE_SIZE_KB", 100); //图片上传的路径 define("UPLOAD_IMAGE_PATH", "./upload/"); //获取允许的图像格式 $mime = explode(",", USER_FACE_MIME); $is_vaild = 0; //遍历所有允许格式 foreach ($mime as $type) { if ($_FILES['image']['type'] == $type) { $is_vaild = 1; } } //如果格式正确,并且没有超过大小就上传上去 if ($is_vaild && $_FILES['image']['size']<=USER_FACE_SIZE && amp; $_FILES['image']['size']>0) { if (move_uploaded_file($_FILES['image']['tmp_name'], USER_IMAGE_PATH . $_FILES['image']['name'])) { $upload_msg ="上传图片成功!"; } else { $upload_msg = "上传图片文件失败"; } } else { $upload_msg = "上传图片失败,可能是文件超过". USER_FACE_SIZE_KB ."KB、或者图片文件为空、或文件格式不正确"; } //解析模板文件 $smarty->assign("upload_msg", $upload_msg); $smarty->display("upload.tpl"); ?> 模板文件:upload.tpl {if $upload_msg != ""} callbackMessage("{$upload_msg}"); {/if} //回调的JavaScript函数,用来在父窗口显示信息 function callbackMessage(msg) { //把父窗口显示消息的层打开 parent.document.getElementById("message").style.display = "block"; //把本窗口获取的消息写上去 parent.document.getElementById("message").innerHTML = msg; //并且设置为3秒后自动关闭父窗口的消息显示 setTimeout("parent.document.getElementById('message').style.display = 'none'", 3000); } |
非同期コールバックを使用するプロセスは少し複雑ですが、基本的には Ajax の機能と情報プロンプトが受け入れられたテンプレート内にある場合は、レイヤーを設定することで対応できます。状況。
【結論】
これは非常に優れた Web 開発テクノロジーであり、長い間存在していましたが、普及したのは最近です。また、Web 開発の世界に変化をもたらし、RIA (リッチ クライアント) に移行したいと考えています。 ) 開発を進める上で、もちろん、JavaScript を使いすぎるとクライアントが非常に肥大化してしまい、高速でありながら優れたユーザー エクスペリエンスを実現する方法はありません。これには Web 開発者の共同作業が必要です。